表acc_account
示例数据:
acc_id acc_code parent name
------- --------- ------ ------
1 | aaa | -1 | A |
2 | bbb | CP | B |
3 | ccc | OP | C |
4 | ddd | -1 | D |
列acc_code
和parent
是否相等?
该表格有411行,甚至没有acc_code
与parent
列匹配的记录。
然而,下面的这个查询在它应该是所有411行时返回6行。 谁能解释一下?
查询(返回6行):
SELECT *
FROM acc_account a1
WHERE not EXISTS (
SELECT *
FROM acc_account
WHERE acc_account.parent = a1.acc_code
);
答案 0 :(得分:3)
假设您有以下内容:
acc_id acc_code parent name
------- --------- ------ ------
1 | aaa | -1 | A |
2 | bbb | CP | B |
3 | ccc | OP | C |
4 | ddd | -1 | D |
5 | CP | -1 | E |
您的查询会返回acc_id
= 5的记录,因为acc_code
= CP在parent
= 2的记录中以acc_id
的形式存在。
为了在记录中进行搜索,您可以改变查询,如:
SELECT *
FROM acc_account a1
WHERE not EXISTS (
SELECT *
FROM acc_account
WHERE acc_account.parent = a1.acc_code
AND acc_account.id = a1.id
);
或者更简单:
SELECT *
FROM acc_account a1
WHERE a1.parent = a1.acc_code
编辑我刚刚发现你正在寻找NOT exists
,所以这里描述的逻辑是相反的。