2015-01-28 3 views
0

* Предполагая, что это MySql таблицу:Использование IN в котором положение

id | group | members 
1 | blue |  Bob 
2 | red |  Tom 
3 |green |  Maria 
4 |blue |  Maria 
5 |red |  Bob 
6 |red |  Maria 
7 |yellow |  Bob 

Как я могу запросить эту таблицу, чтобы получить строки, где члены находятся как в группе «синий» и «зеленый

Использование "In" в котором пункт не работает для меня

Ожидаемый результат:. "Мария"

Edit:

Возможно, я нашел что-то ... Если я использую переменную n в моем массиве «IN», поэтому я должен использовать то же значение n в части «HAVING». Пробовал с этим утверждением и, похоже, работает. (комментарии оцениваются)

 SELECT id,members 
    FROM my_table 
    WHERE `team` IN('blue', 'red', 'green') 
    GROUP BY members 
    HAVING COUNT(DISTINCT team) >= 3 

Что вы думаете?

+0

показать запрос, который вы пробовали –

+0

Какой запрос вы пробовали? – TZHX

+0

@ Жан-FrançoisSavard, @juergen_d, @TZHX Вот мой SQL заявление: ВЫБРАТЬ идентификатор, член ОТ \t my_table в е КУДА группа В ('синий', 'зеленый') GROUP BY \t членов HAVING COUNT (DISTINCT 'group')> = 2 Ваше заявление в порядке, если в предложении« IN »есть только 2 переменных. Но если я добавлю в него третью переменную, я не получу то, что ожидаю. Я имею в виду, я ожидаю получить 0 строк. – angeltcho

ответ

1

Группа членов и возьмите только те, у которых есть как зеленый, так и синий.

select members 
from your_table 
where `group` in ('blue','green') 
group by members 
having count(distinct `group`) = 2 

Запрос будет фильтровать записи, имеющие только синий и зеленый цвета. Затем требуется только membes, у которых есть две разные группы - синий и зеленый.

+1

Затем измените '= 2' на'> = 2' –

+0

@ Jean-FrançoisSavard: Вы прочитали вопрос? * Как я могу запросить эту таблицу, чтобы получить строки, в которых члены находятся как в группе «синий», так и «зеленый». * –

+0

@ Jean-FrançoisSavard: И часть 'have' необходима, и ее не нужно менять. –

0
select * 
from members mb 
inner join members mg on mg.members = mb.members and mg.`group` = 'green' 
where mb.`group` = 'blue' 

http://sqlfiddle.com/#!2/05d8b2/8/0

Это пересечение (внутреннее соединение) между двумя группами.

Смежные вопросы