2015-07-24 1 views
0

Я пытаюсь добиться чего-то подобного.Как выбрать использование соединения в двух условиях для того же столбца

id tag name 
1 foo name 
1 bar name 
2 foo name 
2 foss name 

Что я пытался сделать.

select id, group_concat(distinct tag) as tag, group_concat(distinct name) as name 
where tag = "foo" or tag = "bar" group by id; 

, к которому я,

id  tag  name 
1 foo, bar name 
2 foo, foss name 

Но то, что я хочу, только если тег «Foo» и «бар» для такой же идентификатор, то печать, которая должна дать выход как это.

id  tag  name 
1  foo, bar name 

Я сделал это, так как это будет работать на языках программирования, таких как JAVA или C++, с использованием AND. Это приводит к нулевой ..

select id, group_concat(distinct tag) as tag, group_concat(distinct name) as name 
where (tag = "foo" and tag = "bar") group by id; 

ответ

1

Я думаю, что вы хотите group by и having:

select id, group_concat(distinct tag) as tag, 
     group_concat(distinct name) as name 
from t 
where tag in ('foo', 'bar') 
group by id 
having count(distinct tag) = 2; 

Как примечание. Любой язык программирования, с которым я знаком, вернет false для tag = 'foo' and tag = 'bar', потому что тег может иметь одно значение или другое, но не то, и другое.

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