2011-11-11 6 views
0

私はこれを最善の方法で説明します。INNER JOINを使用したSQLクエリは、数値と一致する場合に特定の値を返すように作成されました。

2つのIDと一致する3つのテーブルを持つ3つの内部結合を実行するSQLクエリがあります(itemテーブルとitemTypeテーブルがあります。item.itemTypeIDはitemType.idにリンクされています)。

私のコードでは、Itemに関連付けられたItemTypeがない場合、item.itemTypeIDは-1に設定されます。

しかし、このクエリの場合、ID-1のitemTypeは存在しないため、レコードは返されません。

itemTypeを持つレコードだけでなく、itemTypeが-1のレコードをすべて戻し、関連する返された要素をNULLに設定する必要があります。

My SQLクエリは次のとおりです。

` SELECTは関係なく、彼らがitemTypeにテーブルにマッチしているかどうかの、これは、アイテムテーブルからすべてのレコードを返します..あなたは、外部結合を必要としている

, items.code 
, items.description 
, items.expirydate 
, items.batchnumber 
, items.serialnumber 
, items.orderref 
, items.datepurchased 
, items.price 
, items.consigcalloff 
, items.commodity_qty 
, itemtypes.code 
, itemtypes.description 
, locations.code 
, locations.description 
, keepers.code 
, keepers.fname 
, keepers.lname 
FROM items inner join itemtypes ON items.type = itemtypes.id inner join keepers ON items.keeper = keepers.id inner join locations ON items.location = locations.id` 
+0

おそらく左に参加しますか? – geekchic

+0

-1の値はitems.ItemTypeIDのitemsテーブルに実際に格納されていますか?またはこれを防ぐことができるpk-fk関係が定義されていますか? – xQbert

答えて

3

をitems.idかない。一致するものが存在しない場合、itemTypeフィールドはnullになります。

SELECT items.id 
, items.code 
, items.description 
, items.expirydate 
, items.batchnumber 
, items.serialnumber 
, items.orderref 
, items.datepurchased 
, items.price 
, items.consigcalloff 
, items.commodity_qty 
, itemtypes.code 
, itemtypes.description 
, locations.code 
, locations.description 
, keepers.code 
, keepers.fname 
, keepers.lname 
FROM items 
     left outer join join itemtypes ON items.type = itemtypes.id 
     inner join keepers ON items.keeper = keepers.id 
     inner join locations ON items.location = locations.id` 
+0

ありがとうございます。パーフェクト – MichaelMcCabe

関連する問題