如何在同一列

时间:2015-07-24 01:34:45

标签: mysql sql

我正在努力实现这样的目标。

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"和" bar"对于相同的id,然后打印,这应该给出这样的输出。

id     tag       name
1     foo, bar   name

我这样做,因为它可以在JAVA或C ++等编程语言中使用AND。它导致null ..

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

1 个答案:

答案 0 :(得分: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;

作为一个说明。我熟悉的任何编程语言都会为tag = 'foo' and tag = 'bar'返回false,因为tag可能有一个值或另一个值,但不是两者都有。