SQL 外连接 2 个表
Posted
技术标签:
【中文标题】SQL 外连接 2 个表【英文标题】:SQL Outer join 2 tables 【发布时间】:2014-03-06 10:50:54 【问题描述】:我有两张桌子,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 查询返回有价格的产品的价格,而不是其他产品的价格... 有什么想法吗?
【问题讨论】:
你能发个小提琴吗 img15.hostingpics.net/pics/936101Sanstitre.png 【参考方案1】:更改表格之间的链接:
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 的所有行
【讨论】:
@FabienPapet:祝你有美好的一天;) +1 :这个答案还将查询的顺序从price LEFT JOIN product
(如OP的帖子中)反转为product LEFT JOIN price
,从而确保所有产品始终包含在JOIN的结果中.
@MatBailie:谢谢。祝你有美好的一天;)【参考方案2】:
您需要更改联接的操作方式。您可以使用当前查询并使用RIGHT
join,或者我更喜欢的方式是切换表的顺序(仍然使用LEFT
join),以便您希望查看所有结果的表位于连接的左侧。有时是一个困难的概念,但这张图可以提供帮助
切换加入代码: 选择 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 ;
【讨论】:
您不能放入 WHERE 子句 id_marchand = 4 因为当 comp_product_marchand 以这种方式不存在时,您会剪切该行 我以为这只是针对该商家的过滤?所以他的查询只返回一次商家的价格和产品。 感谢您的帮助,您的图表对我有很大帮助! ;) @Telexx:嗨,我们的 OP 想要那个 marchant 的所有产品,但是如果这个 marchant 没有产品,他想展示那个产品。 @Telexx:修正你的答案,+1 以获得详细的 JOIN 解释以上是关于SQL 外连接 2 个表的主要内容,如果未能解决你的问题,请参考以下文章