2012-01-18 4 views
1

からデータを返す私は2つのテーブルを持っていますテーブル。MYSQLクエリ(存在する場合)の値に基づいて行を選択するためにそうでなければ、別のテーブル

これまでのところとても良いです。ただし、itemIDCATALOGに対応する行は、ORDERテーブルに存在しない可能性があります。その場合は、最初のテーブルCATALOGitemName,itemCodeを使用してフォールバックします。

これはMYSQLを単一の(複合)文で使用することは可能ですか?

編集:ここでは は、サンプルテーブルは、私が項目に関する完全なデータを取得するために、次のクエリを使用し

CATALOG: 
------------------------------------ 
| itemID | itemCode | itemName | 
------------------------------------ 
| 1  | 89873232 | Oats  | 
| 2  | 32849392 | Beer  | 
------------------------------------ 

ORDER: 
---------------------------------------------- 
| orderID | itemID_FK | itemPrice | etc... | 
---------------------------------------------- 
| 213232 | 2  | 3.99  | ... | 
---------------------------------------------- 

です:

SELECT itemID, itemName, itemPrice FROM CATALOG 
INNER JOIN ORDER 
ON itemID = itemID_FK 
WHERE itemID = %d 

CATALOG価格は含まれませんので、私は、これは参加必要ORDERから得られる。 itemID=1を使用すると、ORDERテーブルに対応するエントリがなく、クエリが失敗します。私はちょうど2つのテーブル間LEFT OUTER JOINを使用ORDER

+4

あなたは現在何に参加していますか?あなたは現在の質問を出すことができますか? '... CATALOG LEFT JOIN ORDER ON CATALOG.itemID = ORDER.itemID_FK'を実行すると、' CATALOG'の各行に対して 'ORDER'の行が得られます。もし見つからなければ、その列に 'NULL'があります。 –

+0

いくつかのサンプルデータと、後の結果セットの例を表示できますか? – Phil

+0

サンプルテーブルと詳細を追加しました。私の編集を参照してください。 –

答えて

1

の項目のエントリがない場合は、常に、JOINの左側のテーブルに対応するデータを持つことになりますので、それは、少なくともitemNameを取得したい:

SELECT C.itemName, C.itemCode, O.itemPrice, ... 
FROM CATALOG as C 
    LEFT OUTER JOIN ORDER AS O ON C.itemID = O.itemID_FK 

CATALOGからアイテムがORDERSに存在しない場合は、上記の選択におけるすべてのOSはNULLとしてアップになります。

+1

「OUTER」キーワードは冗長です。 'LEFT JOIN'は暗黙的に* outer *です。 – Phil

関連する問題