无法理解此 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_codeparent 不相等吗?

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,所以这里描述的逻辑是相反的。