如何在sql查询中使用CTE不工作?

  • 本文关键字:CTE 工作 sql 查询 mysql sql
  • 更新时间 :
  • 英文 :


我有一个使用NOT IN与cte的问题。实际上,我还想显示一个在AccountOf表中没有任何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);

这三个表是:

Persons
id | name | address | age | eyeColor | gender
BankAccounts
id | balance
AccountOf
id | person_id → Persons | account_id → BankAccounts

看起来person_id不在子查询中指定的p表中。Person_id在a表中,因此如果您将其更改为p.id NOT in(从帐户中选择Person_id),那么只要您在表p和a之间的CTE中所做的连接不是内部连接,就应该工作,因为这将只过滤两个表中的id,并将使过滤在子查询中冗余。

您也可以使用子查询而不是CTE来不使用ram(但这是另一个主题!)

最新更新