如何使用WHERE子句JOIN表,并显示不存在的行

时间:2016-03-03 11:10:37

标签: mysql sql join

标题可能听起来有点令人困惑,但让我解释一下:
我有三张桌子:
存储

storeID | name
1       | store1
2       | store2
3       | store3

产品

productID | name
1         | ball
2         | cup

store_product

storeID_fk | productID_fk
2          | 1
1          | 2
3          | 2

我想要存档的结果如下:

storeID | name  | storeID_fk | productID_fk
1       | store1| NULL       | NULL
2       | store2| 2          | 1
3       | store3| NULL       | NULL

到目前为止我尝试过:

SELECT * FROM `store` 
LEFT JOIN `store_product` on storeID = storeID_fk  
WHERE productID_fk = 1;

但这只会返回:

storeID | name  | storeID_fk | productID_fk
2       | store2| 2          | 1

如何显示空/不存在的行?

1 个答案:

答案 0 :(得分:2)

在执行left join时,将右侧表格条件放在ON子句中以获得真正的左连接行为。 (在WHERE时,您会获得定期inner join结果。)

SELECT * FROM `store` 
LEFT JOIN `store_product` on storeID = storeID_fk  
    AND productID_fk = 1