sql - 为什么我在 SQL Server 'in' 子句中出现语法错误?
问题描述
我在 SQL Server 中编写了一个查询,但出现错误。
代码:
with cte as (
select pe1.name as P1,
pe2.name as P2,
m.title as T
from participant pa1
join participant pa2 on pa2.idMeeting = pa1.idMeeting
and pa2.idPerson > pa1.idPerson
join person pe1 on pe1.id = pa1.idPerson
join person pe2 on pe2.id = pa2.idPerson
join meeting m on m.id = pa1.idMeeting
),
cte_meet_max as (
select count(*) cnt, P1,P2
from cte
group by P1,P2
)
select *
from cte
where (P1,P2) in (
select P1,P2
from cte_meet_max
where cnt = (select max(cnt) from cte_meet_max)
);
错误:
消息 4145,级别 15,状态 1,第 25 行
在预期条件的上下文中指定的非布尔类型表达式,靠近“,”。
期望的结果:
我们可以在 SQL Server 中放置带有“in”子句的两列吗?
请帮忙。
提前致谢。
注意:我尝试解决问题之前发布的问题
解决方案
EXISTS 条件是在 SQL Server 中重写它的正确方法:
with cte as (
select pe1.name as P1,
pe2.name as P2,
m.title as T
from participant pa1
join participant pa2 on pa2.idMeeting = pa1.idMeeting
and pa2.idPerson > pa1.idPerson
join person pe1 on pe1.id = pa1.idPerson
join person pe2 on pe2.id = pa2.idPerson
join meeting m on m.id = pa1.idMeeting
),
cte_meet_max as (
select count(*) cnt, P1,P2
from cte
group by P1,P2
)
select *
from cte
where exists (
select *
from cte_meet_max m1
where m1.cnt = (select max(m2.cnt) from cte_meet_max m2)
and m1.p1 = cte.p1
and m1.p2 = cte.p2
)
推荐阅读
- c# - 如何在 .net 核心中使用 cert.pem、private.key 创建 pfx 文件
- laravel - Laravel api sanctum CSRF 令牌在 chorme 中不匹配
- c# - 将列表与另一个列表进行比较并获取匹配项
- node.js - npm 错误!无法确定要运行的可执行文件
- java - Json 到 POJO 空字段
- c# - 如何在不覆盖值的情况下映射列表
- symfony - Findby() 中的 Symfony LIKE 标准
- unity3d - 是否可以直接向相机显示图像?
- browser-sync - Browsersync 浏览文件
- javascript - 开关'未定义 react/jsx-no-undef