SQL LEFT JOIN 用于连接三个表但其中一个要排除内容
SQL LEFT JOIN for joining three tables but one with to exclude content
我有3张桌子
- 学生
- FEES_PAID
- 暂停
我想从SUSPENDED
.
获取已缴费但未缴费学生的详细信息
SELECT
ID
FROM
STUDENTS s
LEFT JOIN
SUSPENDED p ON s.ID = p.ID
INNER JOIN
FEES_PAID f ON f.ID = s.ID
WHERE
s.ID IS NULL
不幸的是,这不起作用。任何人都可以提出一个有效的查询吗?
提前致谢
您需要检查 second table 是否从 LEFT JOIN
中丢失。因此,您需要查看 table 中的一列。将 WHERE
更改为:
WHERE p.ID IS NULL
或者,使用 NOT EXISTS
:
SELECT s.ID
FROM STUDENTS s INNER JOIN
FEES_PAID f
ON f.ID = s.ID
WHERE NOT EXISTS (SELECT 1 FROM SUSPENDED p WHERE s.ID = p.ID);
请注意,对于这两个查询,您需要限定 SELECT
中的 ID
以指定 table 它的来源。
这应该有效:
SELECT
s.ID
FROM
STUDENTS s
LEFT JOIN
SUSPENDED p
ON s.ID=p.ID
INNER JOIN
FEES_PAID f
ON f.ID= s.ID
WHERE
p.ID IS NULL
我有3张桌子
- 学生
- FEES_PAID
- 暂停
我想从SUSPENDED
.
SELECT
ID
FROM
STUDENTS s
LEFT JOIN
SUSPENDED p ON s.ID = p.ID
INNER JOIN
FEES_PAID f ON f.ID = s.ID
WHERE
s.ID IS NULL
不幸的是,这不起作用。任何人都可以提出一个有效的查询吗?
提前致谢
您需要检查 second table 是否从 LEFT JOIN
中丢失。因此,您需要查看 table 中的一列。将 WHERE
更改为:
WHERE p.ID IS NULL
或者,使用 NOT EXISTS
:
SELECT s.ID
FROM STUDENTS s INNER JOIN
FEES_PAID f
ON f.ID = s.ID
WHERE NOT EXISTS (SELECT 1 FROM SUSPENDED p WHERE s.ID = p.ID);
请注意,对于这两个查询,您需要限定 SELECT
中的 ID
以指定 table 它的来源。
这应该有效:
SELECT
s.ID
FROM
STUDENTS s
LEFT JOIN
SUSPENDED p
ON s.ID=p.ID
INNER JOIN
FEES_PAID f
ON f.ID= s.ID
WHERE
p.ID IS NULL