SQL外连接2表

时间:2014-03-06 10:50:54

标签: mysql sql

我有两个表,comp_productcomp_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查询返回有价格的产品的价格,而不是其他产品的价格...... 有什么想法吗?

2 个答案:

答案 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是在联接的左侧。有时一个困难的概念,但这个图可以帮助

enter image description here

切换加入的代码:      选择          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 ;