如何在 sql 查询中使用 CTE 使用 NOT IN?

How to work with NOT IN using CTE in sql query?

我在将 NOT IN 与 cte 结合使用时遇到问题。实际上,我还想显示一个在 AccountOf table 中没有任何 person_id 的用户。但是NOT IN之后的语句没有执行谁能帮帮我吗?

with p as (
        select p.id, p.name, a.person_id, Sum(b.balance) balance
        from persons p
        join accountOf a on a.person_id = p.Id
        join BankAccounts b on b.Id = a.account_id
        group by p.name
    )
    select *
    from p
    where p.balance < (select Max(balance) from p) * 0.5 OR p.id NOT IN (select person_id from p);

3 个 table 是:

Persons

id | name | address | age | eyeColor | gender

BankAccounts

id | balance

AccountOf

id | person_id → Persons | account_id → BankAccounts

看起来 person_id 不在您的子查询中指定的 p table 中。 Person_id 在 table 中,所以如果您将其更改为 p.id NOT IN (select person_id from account of) 只要加入就应该有效你在 tables p 和 a 之间的 CTE 中做的不是内部连接,因为这将只过滤两个 tables 中的 id,并且会使你的子查询中的过滤变得多余。

您也可以只使用子查询而不是 CTE 来做到这一点,以不使用 ram(但这是另一个话题!)