我有两个表,comp_product
和comp_product_marchand
。
comp_product
包含产品信息(说明,名称等)
comp_product_marchand
包含不同的价格(产品经销商)。每个经销商都有产品价格。但不适用于所有产品
我想为每个经销商提供一个SQL查询产品列表及其价格(即使经销商没有)
我有这个SQL查询:
SELECT
p.id_product,
pm.price
FROM comp_product_marchand pm
LEFT OUTER JOIN comp_product p
ON p.id_product = pm.id_product
WHERE id_marchand = 4
(WHERE子句仅用于演示)
此SQL查询返回有价格的产品的价格,而不是其他产品的价格...... 有什么想法吗?
答案 0 :(得分:5)
更改表格之间的链接:
SELECT
p.id_product,
pm.price
FROM comp_product p
LEFT OUTER JOIN comp_product_marchand pm
ON p.id_product = pm.id_product
AND id_marchand = 4
通过这种方式,您将显示所有产品,如果marchand = 4,则会显示有关marchand的信息。
我将查询放在ON子句中的marchand ID上,因为如果你将它放在WHERE子句中,你将会删除marchand没有该产品的所有行
答案 1 :(得分:3)
您需要更改联接的操作方式。您可以使用当前查询并使用RIGHT
联接,或者我更喜欢的方式是切换表格的顺序(仍使用LEFT
联接),以便您希望查看所有结果的表格for是在联接的左侧。有时一个困难的概念,但这个图可以帮助
切换加入的代码: 选择 p.id_product, pm.price
FROM comp_product p
LEFT OUTER JOIN comp_product_marchand pm ON
p.id_product=pm.id_product
AND id_marchand=4 ;