查找 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=1
与 classid 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
只要从每个聚合返回的两个结果都大于零,每个集合中的值就会重复。
加入可能是一种选择
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);
你能帮我用 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=1
与 classid 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
只要从每个聚合返回的两个结果都大于零,每个集合中的值就会重复。
加入可能是一种选择
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);