我有两个表,关键字和数据.

表关键字有2列(id,关键字),表数据有3列(id[关键字的外键]、名称、值).

我使用这个查询:

SELECT k.id, d.value, d.name
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id

它返回类似于:

1 123 name1
1 456 name2
2 943 name1
3 542 name1
3 532 name2
3 682 name3

每个id可以有0到3的值(将来可能会更多).

如何检索同一行中具有相同id的所有行?

喜欢

1 123 456
2 943
3 542 532 682

我想这样做是因为我想能够对值进行排序.

推荐答案

像这样使用GROUP_CONCAT():

 SELECT k.id, GROUP_CONCAT(d.value)
  FROM keywords AS k
  INNER JOIN data as d ON k.id = d.id
  GROUP BY k.id

此外,您可能需要执行ORDER BY d.name次操作才能获得所需的精确值顺序.这样地:

 SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ')
  FROM keywords AS k
  INNER JOIN data as d ON k.id = d.id
  GROUP BY k.id

Mysql相关问答推荐

更新MySQL表中子记录的序号

SQL:CAST与窗口函数组合导致语法错误

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

如何使用GROUP BY调优简单SQL查询

无法确定查询逻辑

PythonAnywhere中SSH到MySQL数据库无限期挂起,SSH正确,workbench可以完美连接

将 JSON 类型的列与特定字符串值进行比较

组平SQL查询结果

如何通过if语句对SQL查询进行排序

MySQL 查询组按日期(12 小时间隔)

如何通过未知列中的唯一值有效地更新 MySQL 行

此插页中的X是什么> X'3C2F756C3E'

如何使用 phpmyadmin 复制数据库?

phpmyadmin没有收到要导入的数据错误,如何解决?

如何将时刻 JS 时间插入 MySQL

MySQL中的行值增加和减少1

如何将具有相同列值的mysql行分组为一行?

在 MySQL 中存储 IPv6 地址

如何将本地托管的 MySQL 数据库与 docker 容器连接

MySQL - 重复表