mysql - 如何根据返回的行选择多列?

标签 mysql sql

如果我运行 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

最佳答案

你要求的是不可能的。如果有四行的值为:

|  jim@co.uk  |     jim    |   g2  |

您是否希望结果有 4 个名为 group 的列,而不是您当前显示的 group 的两列?

你可能想要的是:

select email, first_name, group_concat(`group`) group by email, first_name

关于mysql - 如何根据返回的行选择多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58261255/

相关文章:

mysql - 字段相关时的数据库结构

c# - 查询数据库的数组 int

mysql - 从 MySQL 查询执行 .bat

mysql - 在 MySQL 4.0 中同时具有 Created 和 Last Updated 时间戳列

php - 多个客户表或大型整体表

PHP + SQL 语法因情况而异,没有意义

SQL Server存储过程插入多个表

mysql - 一张表有多个外键

mysql - 在 sql 中插入不同的表时,如何忽略表中的重复行

java - 仍然对 Java 时间戳等与 MySQL 混淆