MYSQL基于值(如果存在)查询SELECT行,否则从另一个表返回数据

时间:2012-01-18 05:07:32

标签: mysql

我有两张桌子:

CATALOG:
------------------------------------
| itemID    | itemCode  | itemName |
------------------------------------

ORDER:
----------------------------------------------
| orderID   | itemID_FK | itemPrice | etc... |
----------------------------------------------

我想在两个表格上使用itemName选择itemPriceitemCodejoin等。

到目前为止一切顺利;但是,与itemID中的给定CATALOG对应的行可能不存在于ORDER表中。在这种情况下,我希望使用第一个表itemName中的itemCodeCATALOG

这是否可以在单个(复合)语句中使用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=1ORDER表中将没有相应的条目,查询将失败。如果itemName

中的商品没有条目,我希望它至少检索ORDER

1 个答案:

答案 0 :(得分:1)

只需在两个表之间使用LEFT OUTER JOIN,因此您将始终拥有与JOIN左侧表格对应的数据:

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中的项目不存在,则上述选择中的所有O.将变为NULL。