查找 2 select 语句中是否存在重复项

Finding whether duplicates exists in 2 select statements

你能帮我用 SQL 语句找到第一个 Select 语句和第二个 Select 语句中存在的重复名称吗?

例如: 我需要查找 Class 1 中同名的学生是否存在于 Class 2 或 3 中。

select firstname from College where classid = 1

和第二个 select 语句是:

select firstname from College where classid in (2, 3)

如果有任何名称的匹配出现,那么我想 select 该记录。

您可以使用带有 HAVING 子句的 GROUP BY 表达式对每个集合(classid=1classid in (2,3))的存在计数求和,例如

SELECT firstname
  FROM College 
 GROUP BY firstname
HAVING SUM(CASE WHEN classid = 1 THEN 1 ELSE 0 END) > 0 
   AND SUM(CASE WHEN classid IN (2,3) THEN 1 ELSE 0 END) > 0

firstname 只要从每个聚合返回的两个结果都大于零,每个集合中的值就会重复。

Demo

加入可能是一种选择

select a.firstname
from
(
select firstname from College where classid = 1
)a join (
select firstname from College where classid in(2,3)
)b on a.firstname=b.firstname

或者,您可以尝试使用 exists

select firstname from College c where classid = 1
and exists (select 1 from College c1 where c.firstname=c1.firstname and classid in(2,3))

一个非常简单的基于集合的方法是使用intersect:

select firstname
from College
where classid = 1
intersect
select firstname
from College
where classid in (2, 3);