【发布时间】:2021-12-28 04:26:35
【问题描述】:
我一直在尝试使用 SQLBolts 教程学习 SQL,对于这个练习,我需要编写一个查询来显示所有没有员工的建筑物的名称,只使用 LEFT JOIN。我的答案与网站不同,我想知道为什么它们都有效。我们的解决方案之间的唯一区别是我将 WHERE 建筑物设置为 NULL 与 SQL Bolts 解决方案的 WHERE 角色为空。如果建筑价值为空,那不应该返回空值吗?同样与角色相同,当没有建筑物附加到该角色时,数据库如何知道该建筑物的角色为空值?
我的查询
SELECT building_name
FROM buildings
LEFT JOIN EMPLOYEES
ON buildings.building_name = EMPLOYEES.building
WHERE building IS NULL
SQL BOLT 查询
SELECT DISTINCT building_name, role
FROM buildings
LEFT JOIN employees
ON building_name = building
WHERE Role IS NULL
【问题讨论】:
-
基本上,右侧表格中与
ON buildings.building_name = EMPLOYEES.building不匹配的任何内容都将返回NULL。因此,如果您从右表WHERE right_table.column_name IS NULL中定义任何列,您将得到相同的结果。您应该了解LEFT JOIN的工作原理,只有您自己才能理解它是如何发生的。 -
@FanoFN: 不是 any 列,您应该避免使用实际上可能具有空值的列
-
哦,是的,没错@ysth。我的错,我可能太专注于
ON条件,以至于其他列数据的可能性是NULL让我忘记了。
标签: mysql sql left-join outer-join