mysql - 当第二个表在 WHERE 语句中时,SQL 左连接不返回所有结果
问题描述
我正在尝试将两个表连接在一起,其中第二个表可能没有相关记录。在这种情况下,我希望第一个表中的数据仍然显示。我可以使用 LEFT JOIN 来做到这一点,但我遇到的问题是我在 WHERE 语句中引用了第二个表。
SELECT a.field1, a.field2, b.field2 from a
LEFT JOIN b ON a.id = b.id
WHERE a.field1 = "value" AND b.field1 = "value"
似乎因为我在 WHERE 语句中引用了表 b,所以我只获取表 b 中存在相关记录的记录。有没有办法在 WHERE 语句中仍然包含表 b 并仍然从表 a 返回记录,即使表 b 中没有相关记录?
谢谢!
解决方案
将left join
ed 表上的条件移动到连接的on
子句中:
SELECT a.field1, a.field2, b.field2
FROM a
LEFT JOIN b ON a.id = b.id AND b.field1 = 'value'
WHERE a.field1 = 'value'
当 then在 table中为给定的 tableLEFT JOIN
找不到匹配项时,所有列都是,因此不能在子句中满足条件 - 因此从结果集中删除整行。您希望该条件被绑定到。b
id
a
b
null
b.field1 = 'value'
where
left join
推荐阅读
- jsx - 物化网格未知项目数
- python - 问题包括异常处理以及查找最大和最小编号。这是coursera平台的作业问题
- javascript - 使用 Ruby on Rails 单击图像时添加声音
- batch-file - 使用批处理文件将文件移动到新文件夹 - 意外行为
- javascript - 未从原始 JavaScript addEventListener 接收 Angular Web 组件触发事件
- java - 如何在android studio上制作一个按钮来减少和相反的布局?
- javascript - 如何找出可以从 npm 包中导出的内容
- python - 通过 Python 预览 Outllok 电子邮件
- c++ - .EXE 可以使用间接导入的 DLL 中的符号吗?
- c++ - 在 cmake add_definition 中定义字符串文字宏