我碰到下面的SQL问题,他们的著名HR
架构与部门名称的位置以及位置所附带的Oracle:SQL查询找到没有部门
写SQL查询来发现所有的位置和每个地点的部门以及没有部门的地点。不要使用OUTER JOIN。
随着OUTER JOIN
很容易:
SELECT department_name, city
FROM locations
LEFT OUTER JOIN departments USING (location_id);
我得到43个结果。我试着用这样的:
SELECT department_name, city
FROM locations l, departments d
WHERE l.location_id = d.location_id OR
l.location_id NOT IN (SELECT DISTINCT location_id FROM departments);
,但我得到的只有27行,就好像我做的:
SELECT department_name, city
FROM locations
JOIN departments USING (location_id);
为什么OR
不行?谢谢!
编辑:
正如@mathguy指出的那样,我在departments
表中的列location_id
曾与NULL
部门。这就是为什么NOT IN
不返回任何行。否则,我会有更多的行查找departments
表中的位置标识。
可能是坏的查询是第一个,而不是第二..左外连接应该使用ON,而不是使用 – Massimo
@Massimo,为什么?它确实产生了期望的结果。 –
http://docs.oracle.com/database/121/SQLRF/statements_10002.htm#i2107296 – Massimo