无法理解此 EXISTS 查询
trouble understanding this EXISTS query
Table 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
不相等吗?
table 有 411 行,acc_code
甚至没有任何记录与 parent
列相匹配。
不过下面这个查询,returns6行的时候应该是全部411行。
谁能解释一下?
查询(Returns 6 行):
SELECT *
FROM acc_account a1
WHERE not EXISTS (
SELECT *
FROM acc_account
WHERE acc_account.parent = a1.acc_code
);
假设你得到了以下集合:
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 |
您的查询将 return acc_id
= 5 的记录,因为 acc_code
= CP 在 acc_id
= 2 的记录中作为 parent
存在。
为了在记录中搜索,您可以像这样更改您的查询:
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
,所以这里描述的逻辑是相反的。
Table 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
不相等吗?
table 有 411 行,acc_code
甚至没有任何记录与 parent
列相匹配。
不过下面这个查询,returns6行的时候应该是全部411行。 谁能解释一下?
查询(Returns 6 行):
SELECT *
FROM acc_account a1
WHERE not EXISTS (
SELECT *
FROM acc_account
WHERE acc_account.parent = a1.acc_code
);
假设你得到了以下集合:
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 |
您的查询将 return acc_id
= 5 的记录,因为 acc_code
= CP 在 acc_id
= 2 的记录中作为 parent
存在。
为了在记录中搜索,您可以像这样更改您的查询:
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
,所以这里描述的逻辑是相反的。