我正在尝试编写查询来解决以下问题:
我有一个名为kids的表,其中有2列:
kids_name varchar2(20) ,
flag_color varchar2(20)
上表中的条目如下:
A red
B red
C blue
D red
A blue
B blue
F red
G yellow
A yellow
B Green
我想写一个查询来显示那些同时带有红色和蓝色标志的孩子的名字。
因此,使用上表,查询应返回:
A
B
答案 0 :(得分:3)
一种解决方案是使用HAVING
和DISTINCT
select kids_name
from your_table
where flag_color in ('red', 'blue')
group by kids_name
having count(distinct flag_color) = 2
答案 1 :(得分:0)
您可以尝试使用Exists
select * from tablename a
where exists (select 1 from tablename b
where a.kids_name=b.kids_name and flag_color in ('red', 'blue') having count(*)>1)
答案 2 :(得分:0)
select kids_name
from your_table
where flag_color in ('red', 'blue')
group by kids_name
having count(*) > 1 // you can have count(*) > 1 if you want students with total count as 2 only.
根据数据集,行中没有重复,否则您将必须首先创建不同的行,然后必须在该结果集上运行此查询。
having count(distinct flag_color) = 2
提到的 Radim Bača
很好。