我的理解是,IN 就像一个 bool 函数,为使用 IN 时外部查询中的一行返回 true 的每个实例返回一个值。因此,结果集不应该只包含与外部查询一样多的行吗?
表 1:
DNUMBER DLOCATION
---------- ---------------
1 Houston
4 Stafford
5 Bellaire
5 Houston
5 Sugarland
表 2:
DNAME DNUMBER
-------------------- ----------
Research 5
Administration 4
Headquarters 1
那么这个查询不应该只返回 3 行吗?
SELECT D.dname, DL.dlocation
FROM department D, dept_locations DL
WHERE D.dnumber IN
(SELECT dnumber FROM dept_locations)
结果:
DNAME DLOCATION
-------------------- -------------
Headquarters Houston
Administration Houston
Research Houston
Headquarters Stafford
Administration Stafford
Research Stafford
Headquarters Bellaire
Administration Bellaire
Research Bellaire
Headquarters Houston
Administration Houston
Research Houston
Headquarters Sugarland
Administration Sugarland
Research Sugarland
最佳答案
SELECT D.dname, DL.dlocation
FROM department D, dept_locations DL
WHERE D.dnumber IN
(SELECT dnumber FROM dept_locations)
没有以任何方式限制要匹配的行的连接条件(显式或隐式),因此执行交叉连接(左侧行与右侧行的所有组合)。
关于mysql - SQL IN 工作困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5983140/