MySQL:只输出一次值

时间:2010-11-01 21:19:09

标签: select mysql

我想我以前做过这个,但它也可能是PHP的功能。我想要的是做一个MySQL查询(在MySQL客户端,而不是PHP)并获得例如

Foo    A
       B
       C
Bar    B
       D
       E

而不是

Foo    A
Foo    B
Foo    C
Bar    B
Bar    D
Bar    E

如果按第一列排序,这当然只会产生。不确定是否可能,但就像我说的那样,我的意思是要记得曾经做过一次,但是不记得是怎么回事,或者是不是通过一些PHP“神奇”...


更新:突然想起我曾经使用它的地方。我在想的是WITH ROLLUP的{​​{1}}修饰符。 但是我也发现它没有按照我的想法行事,所以我的问题仍然存在。虽然我认为现在没有解决方案。但聪明的人以前证明我错了:P


更新:也许应该提到我想要的是多对多关系。在实际选择中,Foo将是与会者的第一个名字,我也想要姓氏和其他一些列。 A,B,C,D,E是与会者选择的选项。

GROUP BY

2 个答案:

答案 0 :(得分:1)

这会给你

Foo    A,B,C
Bar    B,D,E    

SELECT column1, GROUP_CONCAT(column2) FROM table GROUP BY column1

答案 1 :(得分:0)

在SQL Server中测试过,但我认为它会转换为MySQL。

create table test (
    id int,
    col1 char(3),
    col2 char(1)
)

insert into test
    (id, col1, col2)
    select 1, 'Foo', 'A' union all
    select 2, 'Foo', 'B' union all
    select 3, 'Foo', 'C' union all
    select 4, 'Bar', 'D' union all
    select 5, 'Bar', 'E' union all
    select 6, 'Bar', 'F'

select case when t.id = (select top 1 t2.id 
                             from test t2 
                             where t2.col1 = t.col1 
                             order by t2.col1, t2.col2) 
            then t.col1
            else ''
       end as col1, 
       t.col2
    from test t
    order by t.id

drop table test