我有一个包含以下列的表格:
idCat, idParent, Des
idCat 是自动递增的,Des 用于描述,如果记录是父项,则 idParent 可以为“0”,如果是子项,则它可以具有父项的“idCat”值。
我需要查询所有没有孩子的记录的 SELECT "Des",如下所示:
SELECT Des FROM Table HAVING COUNT (idCat=idParent) = 0
显然这个查询不起作用。
你能帮我吗?
这可以通过 NOT IN、NOT EXISTS 或 LEFT JOIN ... WHERE NULL 来完成 - 后者通常是 MySQL 中性能最好的:
SELECT t1.Des FROM Table t1
LEFT JOIN Table t2 on t1.idCat = t2.idParent
WHERE t2.idParent IS NULL
如果所有父母 idParent 字段为 0 或 null 则使用此查询
SELECT Des FROM Table HAVING idParent = 0 OR idParent IS NULL
这将是可行的,但对于大数据库来说会更慢;
SELECT Des FROM Table HAVING idParent NOT IN ( SELECT idCat FROM Table )