【发布时间】:2018-12-10 08:54:19
【问题描述】:
我不知道为什么这个 SQL 没有返回任何行:
SELECT team_rel.team_id
, team_rel.login_id
FROM team_rel
INNER JOIN team ON team_rel.login_id = team.login_id
WHERE team.login_id = '39'
AND NOT EXISTS (
SELECT 0
FROM team_rel
INNER JOIN team ON team_rel.login_id = team.login_id
AND team_rel.login_id = '39'
AND team_rel.team_id = team.id
)
以下 SQL(相同但没有 NOT EXISTS 条件):
SELECT team_rel.team_id
, team_rel.login_id
FROM team_rel
INNER JOIN team ON team_rel.login_id = team.login_id
WHERE team.login_id = '39'
返回:
+---------+----------+
| team_id | login_id |
+---------+----------+
| 23 | 39 |
+---------+----------+
| 23 | 39 |
+---------+----------+
| 13 | 39 |
+---------+----------+
| 13 | 39 |
+---------+----------+
| 16 | 39 |
+---------+----------+
| 16 | 39 |
+---------+----------+
| 25 | 39 |
+---------+----------+
| 25 | 39 |
+---------+----------+
NOT EXISTS 子查询(与 team_id 测试相同的 SQL)返回:
SELECT team_rel.team_id
, team_rel.login_id
FROM team_rel
INNER JOIN team ON team_rel.login_id = team.login_id
AND team_rel.login_id = '39'
AND team_rel.team_id = team.id
返回:
+---------+----------+
| team_id | login_id |
+---------+----------+
| 23 | 39 |
+---------+----------+
| 25 | 39 |
+---------+----------+
我希望我的第一个选择返回:
+---------+----------+
| team_id | login_id |
+---------+----------+
| 13 | 39 |
+---------+----------+
| 16 | 39 |
+---------+----------+
但它不返回任何行?!
【问题讨论】:
-
您的子选择中是否缺少 where 子句?
-
如果您希望我们帮助您,您需要提供更多信息,仅发布一条 SQL 语句不会完成这项工作。
-
您的子查询不相关...它需要引用外部查询表的条件。
-
“返回 null”是指没有行(不是同一件事)。正如其他人所指出的那样,
not exists子句可能正在删除所有行,但我们需要确定样本数据。 -
谢谢大家..我添加了更多信息..请检查..