2011-11-11 52 views
0

我會盡力解釋這是我能做到的最好方式。SQL查詢與INNER JOIN作出返回特定值,如果匹配一個數字

我有一個SQL查詢與3個表匹配兩個ID(即我有一個'Item'表和一個'itemType'表。item.itemTypeID與itemType.id鏈接)。

在我的代碼中,如果沒有與Item關聯的ItemType,那麼item.itemTypeID設置爲-1。

但是,當涉及到這個查詢,沒有這樣的ID爲-1的itemType,所以它不會回來的記錄。

我需要它返回所有具有itemType的記錄,但也包含itemType爲-1的所有記錄,並將相關的返回元素設置爲NULL。

我的SQL查詢如下;

` 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 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

你會需要一個外部連接。這將從項目表中返回的所有記錄,不論他們是否有在ITEMTYPE表匹配或不。當不存在匹配時,itemType字段將爲空。

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