2011-12-15 10 views
1

私はすべてのアイテムIDが単一のソースから来る在庫データベースを持っています。現在、主テーブル(cp_partlistが)のようなものになります。mysql - 構造が異なる複数のテーブルからデータを選択

- PK_PartID 
- TableName 

を私は、アイテムの種類ごとに別々のテーブルを持っており、各テーブルには、さまざまなデータを持っています。今私は、

- FK_PartID 
- OD 
- ID 
- Thickness 

を私は与えられたPartIDのための具体的な情報が必要な場合:

- FK_PartID 
- ThreadType 
- Length 
- DriveType 

をし、持っているワッシャーのためのテーブル:たとえば、私が持っているボルト用のテーブルを持っているかもしれませんプライマリテーブルのテーブル名を検索し、それを使用して、正しいテーブルから必要な特定のデータを取得します。

もっと直接的なアプローチが必要なようです。私は次のようにJOINをLEFT使用してみました:。

SELECT * FROM cp_partlist AS pl 
     LEFT JOIN bolts ON pl.PK_PartID=bolts.FK_PartID 
     LEFT JOIN washers ON pl.PK_PartID=washers.FK_PartID 
    WHERE PK_PartID=400004 

これは私がすべてのテーブルから列で終わることを除いて働くだけではなく、テーブル、私はに興味を、それは違うので、私は列名を指定することはできませんテーブルごとに

これを行うより良い方法はありますか?ありがとう。

+0

あなたは何をすべきか結果必要? – chance

+0

あなたのアプリケーションは、どの列で結果を探すかをどのように知っていますか? PartIDに基づいてどのフィールドを探していなければならないのか、それともnull以外の値だけを探すのかはすでに分かっていますか? –

+0

同じpartidを持つボルトとワッシャーは何を表していますか? –

答えて

0

私はあなたが正しく質問していることを理解していますが、ボルトとワッシャテーブルに結合されたcp_partlistテーブルからデータを取得したいと考えています。

これはUNIONステートメントで確認することができますが、各JOIN ed列のフィールドタイプは同じタイプでなければなりません。

(上記の基準が満たされた場合)ので、このようなクエリを使用することができます

SELECT pl.*, bolts.FKPartID,bolts.ThreadType AS Data1,bolts.Length AS Data2, bolts.Drivetype as Data3 FROM cp_partlist AS pl 
LEFT JOIN bolts ON pl.PK_PartID=bolts.FK_PartID 
WHERE PK.PartID=400004 

    UNION 

SELECT pl.*,washers.FKPartID,washers.OD AS Data1,washers.ID as Data2, Washers.thickness as Data3 FROM cp_partlist as pl 
LEFT JOIN washers ON pl.PK_partID = washers.FK_partID 
WHERE PK.PartID=400004 

これは、次の列を持つテーブルとなることに注意して下さい:

PK_PartID,Tablename,FK_PartID,Data1,Data2,Data3 
+0

フィールドは同じタイプではなく、各テーブルに同数のフィールドがありません。 – Tim

+0

これを行う1つの方法は、すべてのフィールドをvarcharにキャストするか、各AutoIDの正しいテーブルを定義する 'definitions'テーブルを持つことです。アプリケーションロジックでは、単純にSQLを構築し、要求されたIDに従って正しい列を選択することができます。 – Simon

関連する問題