2016-05-27 10 views
0

私は2台のテーブル車を持っていますモデルと車部分です。どちらもフィールドが主キーmodelIDpartIDパーツテーブルに関連しています。 私が選んだモデルカーに合ったパーツを表示しようとしています。 次は正常に動作します:mySQL:レコードテーブルを同じテーブルから取得

SELECT tblmodel.modelID, 
     tblmodel.model, 
     tblparts.part, 
     tblparts.part_number, 
     tblparts.description, 
     tblparts.list_price 
FROM (tblmodel 
     INNER JOIN tblpartfitment 
       ON tblmodel.modelID = tblpartfitment.modelID) 
     INNER JOIN tblparts 
       ON tblpartfitment.partID = tblparts.partID 
WHERE tblmodel.modelID = 1; 

tblpartsテーブルは universal_part という名前のtinyint型のフィールドがあります。 universal_part = を元のクエリに含むすべての部分を含めるようにしています。

つまり、汎用の部品と指定されたmodelIDの部品を常に返します。

ユニオンを使用しようとしましたが、エラーが発生しました。

答えて

1

は、私はあなたがON句のロジックを含めるだけのことができると思います。

SELECT m.ModelID, m.Model, p.part, p.part_number, p.description, p.list_price 
FROM tblmodel m INNER JOIN 
    tblpartfitment pf 
    ON m.ModelID = pf.modelID INNER JOIN 
    tblparts p 
    ON pf.partID = p.partID OR p.universal_part = 1 
WHERE m.ModelID = 1; 

EDIT:

あなたはunionを使用して最高のオフであってもよい:

SELECT m.ModelID, m.Model, p.part, p.part_number, p.description, p.list_price 
FROM tblmodel m INNER JOIN 
    tblpartfitment pf 
    ON m.ModelID = pf.modelID INNER JOIN 
    tblparts p 
    ON pf.partID = p.partID AND p.universal_part <> 1 
WHERE m.ModelID = 1 
UNION ALL 
SELECT m.ModelID, m.Model, p.part, p.part_number, p.description, p.list_price 
FROM tblmodel m CROSS JOIN 
    tblparts p 
WHERE p.universal_part = 1; 
+0

は素晴らしい作品が、もしModelIDが ''であるか、ModelIDにpartfitmentの関係がない場合、レコードは取得されません。普遍的な部品は常に返されるべきです。 – Rick

+0

代わりに 'LEFT JOIN tblparts'を使用してください。 – ebahi

+0

動作していないようです。同じように動作します。 – Rick

関連する問題