SQL LEFT JOIN 用于连接三个表但其中一个要排除内容

SQL LEFT JOIN for joining three tables but one with to exclude content

我有3张桌子

我想从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