如何在 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(但这是另一个话题!)
我在将 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(但这是另一个话题!)