如果我运行SELECT查询并返回其中包含冗余信息的行,那么如何在一行中显示该信息?
当前我的查询是这样的:
SELECT email, first_name, group FROM membership
然后返回结果集,如下所示:
------------------------------------
| email | first_name | group |
------------------------------------
| bob@co.uk | bob | g1 |
| jim@co.uk | jim | g1 |
| jim@co.uk | jim | g2 |
| jane@co.uk | henry | g2 |
------------------------------------
相反,我需要结果集如下所示:
--------------------------------------------
| email | first_name | group | group |
--------------------------------------------
| bob@co.uk | bob | g1 | |
| jim@co.uk | jim | g1 | g2 |
| jane@co.uk | henry | g2 | |
--------------------------------------------
重要的是,尽管有多余的名称,但列名“ group”的名称不要不同。
编辑:为清楚起见,组数可能会更改。 edit2:我用于初始查询的完整代码是:
SELECT
persons.mail AS email,
persons.fname AS 'first_name',
persons.lname AS 'last_name',
groups.name as add_list
FROM group_membership
LEFT JOIN groups ON group_membership.gid = groups.gid
LEFT JOIN persons ON group_membership.uid = persons.uid
WHERE persons.mail != ""
ORDER BY last_name
答案 0 :(得分:3)
您要的是不可能的。如果有四行,其值:
| jim@co.uk | jim | g2 |
您希望结果中有4列名为group
的列,而不是当前显示的group
的两列吗?
您可能想要的是:
select email, first_name, group_concat(`group`) group by email, first_name
答案 1 :(得分:1)
对于您的示例数据,它将这样做:
.java
请参见demo。
结果:
select email, first_name,
min(`group`) `group`,
case when max(`group`) <> min(`group`) then max(`group`) end `group`
from membership
group by email, first_name
答案 2 :(得分:0)
根据上述示例,以下内容将适用
SELECT email, first_name, max(case
when
group ='g1' then group else null end)
as groupg1,
max(case
when
group ='g2' then group else null end)
as groupg2
FROM membership group by email,
first_name