какой должен быть правильный запрос, чтобы получить ниже результат из таблицы - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь написать запрос, чтобы решить следующую проблему:

У меня есть таблица с именами детей с 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

Ответы [ 3 ]

3 голосов
/ 11 апреля 2019

Одним из решений является использование HAVING и DISTINCT

select kids_name
from your_table
where flag_color in ('red', 'blue')
group by kids_name
having count(distinct flag_color) = 2
0 голосов
/ 11 апреля 2019
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 - это хорошо.

0 голосов
/ 11 апреля 2019

Вы можете попробовать использовать 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...