【问题标题】:LEFT JOIN query not returning all rows in first tableLEFT JOIN 查询不返回第一个表中的所有行
【发布时间】:2015-06-02 09:52:35
【问题描述】:

SQL Server 2008 R2使用管理工作室。

尝试执行LEFT JOIN 并且我需要返回第一个表中的所有行,而不管该行是否能够与第二个表绑定。 不知道我解释的对不对。

这是我现在得到的:

select a.id, a.name, b.store, b.stock
from products a left join stock b
on a.id = b.id
where b.store = '001'
order by a.id

我需要查询来返回公司销售的所有产品,并显示它在商店中的库存001

但现在它只会显示提及商店中产品库存的行001

因此,基本上,如果未提及 001 商店,我需要查询返回 0 库存。

所有在商店002 有库存的产品也需要列出,0 是库存。

【问题讨论】:

  • 了解左连接返回的内容:行上的内连接以及由空值扩展的不匹配左表行。作为左连接的一部分,始终知道您想要什么内连接。在左连接删除任何由空值扩展的行之后,内连接或需要右表列不为空的地方,即仅在行上留下内连接,即“将外连接变为内连接”。你有那个。
  • 这是一个常见问题解答。在考虑发布之前,请始终使用谷歌搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,有或没有您的特定字符串/名称,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。 How to Ask

标签: sql left-join


【解决方案1】:

将 b 条件从WHERE 移动到ON 以获得真正的LEFT JOIN。 (使用WHERE 子句中的b 条件,它作为常规inner join 执行...)

select a.id, a.name, b.store, b.stock
from products a left join stock b
  on a.id = b.id and b.store = '001'
order by a.id

【讨论】:

  • 轰隆隆!谢谢,系统允许后会尽快接受的
  • 您还需要coalesce(b.stock, 0) 以确保您在执行后获得0 的库存。
  • 我自己添加了这个,但改用isnull。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多