COUNT (*) = 0 不起作用?

Tan*_*nno 3 ms-access

好的,我正在尝试查询一个图书馆,该图书馆将显示哪些学生从未借过书。为此,我做了以下工作:

SELECT
    LEERLINGEN.LLNR,
    LEERLINGEN.VOORNAAM,
    LEERLINGEN.TUSSENVOEGSEL,
    LEERLINGEN.ACHTERNAAM,
    LEERLINGEN.KLAS,
    COUNT(*) AS AANTAL
FROM
    UITLENINGEN
    INNER JOIN LEERLINGEN ON UITLENINGEN.LLNR = LEERLINGEN.LLNR
GROUP BY
    LEERLINGEN.LLNR,
    LEERLINGEN.VOORNAAM,
    LEERLINGEN.TUSSENVOEGSEL,
    LEERLINGEN.ACHTERNAAM,
    LEERLINGEN.KLAS
HAVING
    COUNT(*) = 0;
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这似乎不起作用,因为它所做的只是在我单击时创建一个空表Execute

我在这里做错了什么?

a_h*_*ame 6

你需要使用外连接,否则你不会让那些没有借书的学生回来。

然后你需要在学生表上 count() ,而不是“组”(这是在你使用时完成的(*)

SELECT
    LEERLINGEN.LLNR,
    LEERLINGEN.VOORNAAM,
    LEERLINGEN.TUSSENVOEGSEL,
    LEERLINGEN.ACHTERNAAM,
    LEERLINGEN.KLAS,
    COUNT(LEERLINGEN.LLNR) AS AANTAL
FROM
    LEERLINGEN
    LEFT OUTER JOIN UITLENINGEN ON UITLENINGEN.LLNR = LEERLINGEN.LLNR
GROUP BY
    LEERLINGEN.LLNR,
    LEERLINGEN.VOORNAAM,
    LEERLINGEN.TUSSENVOEGSEL,
    LEERLINGEN.ACHTERNAAM,
    LEERLINGEN.KLAS
HAVING
    COUNT(UITLENINGEN.LLNR) = 0;
Run Code Online (Sandbox Code Playgroud)

我不知道 MS-Access,但我认为它支持使用标准 SQL 的外部联接。


suf*_*leR 5

翻译表名后,我认为这会起作用:

SELECT
    LEERLINGEN.LLNR,
    LEERLINGEN.VOORNAAM,
    LEERLINGEN.TUSSENVOEGSEL,
    LEERLINGEN.ACHTERNAAM,
    LEERLINGEN.KLAS

FROM
    LEERLINGEN 
  LEFT OUTER JOIN UITLENINGEN ON UITLENINGEN.LLNR = LEERLINGEN.LLNR
WHERE 
    UITLENINGEN.LLNR IS NULL;
Run Code Online (Sandbox Code Playgroud)

编辑:
您正在寻找根本没有 UITLENINGEN 的 LEERLINGEN。检查这个替代方案:

SELECT
    LEERLINGEN.LLNR,
    LEERLINGEN.VOORNAAM,
    LEERLINGEN.TUSSENVOEGSEL,
    LEERLINGEN.ACHTERNAAM,
    LEERLINGEN.KLAS

FROM
    LEERLINGEN 
WHERE NOT EXISTS (
    SELECT 1 FROM UITLENINGEN WHERE LLNR = LEERINGEN.LLNR
)
Run Code Online (Sandbox Code Playgroud)