mysql - SQL IN 工作困难

标签 mysql

我的理解是,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/

相关文章:

php - 如何跟踪 MySQL 表中刚刚删除的行?

C#:用 DataTable 填充 DataGridView 创建空表

php - 在 MySQL 中选择一些特殊字符时的奇怪行为

PHP仅日期不会插入到Mysql中

php - MySql Insert 不起作用并且没有显示错误

php mysql 按给定参数计算、求和和分组

mysql - Rails has_many 时将 String 类型转换为十进制进行排序

MYSQL 为什么 While 循环返回第一条记录两次?

mysql - 获取每月行值的平均值并按用户分组

php - 数组重复信息