gpt4 book ai didi

mysql - SQL 连接名称在结果的其余部分丢失

转载 作者:行者123 更新时间:2023-11-29 02:13:03 25 4
gpt4 key购买 nike

我有一个包含 zip、name 和 nb 的表。如果一个条目与另一个条目具有相同的编号 (nb),我想将它们的名称连接起来。到目前为止它的工作:

Here is SQL Fiddle具有下表和数据:

CREATE TABLE `blubb` (
`zip` varchar(51) NOT NULL DEFAULT '',
`name` varchar(51) NOT NULL DEFAULT '',
`nb` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO blubb (zip, name, nb) VALUES ('1', 'aa', 1);
INSERT INTO blubb (zip, name, nb) VALUES ('2', 'bb', 2);
INSERT INTO blubb (zip, name, nb) VALUES ('3', 'cc', 3);
INSERT INTO blubb (zip, name, nb) VALUES ('4', 'dd', 2);

SELECT
zip,
name,
GROUP_CONCAT(name ORDER BY zip SEPARATOR '|') AS names
FROM blubb
GROUP BY nb
ORDER BY name ASC

结果:

+-----------------------+
| zip | name | names |
+-----------------------+
| 1 | aa | aa |
| 2 | bb | bb|dd |
| 3 | cc | cc |
+-----------------------+

但我需要的是:

+-----------------------+
| zip | name | names |
+-----------------------+
| 1 | aa | aa |
| 2 | bb | bb|dd |
| 3 | cc | cc |
| 4 | dd | dd|bb |
+-----------------------+

因此,如果一个数字 (nb) 存在不止一次,我不想丢失它(这发生在我的结果中)。我想选择它并按字母顺序连接名称。行本身的名称应始终位于 names 中的第一位,然后是按字母顺序排列的其他名称。

这可能吗?我需要如何更改我的查询?我尝试更改 GROUP BY,但没有什么比我所拥有的更接近。

最佳答案

你已经被 MySQL 的 notorious nonstandard extension to GROUP BY 咬伤了.标准服务器会拒绝您的查询。

您需要的是一个子查询来获取每个 nb 值的名称列表。就像这样。

      SELECT nb,
GROUP_CONCAT(name ORDER BY zip SEPARATOR '|') AS names
FROM blubb
GROUP BY nb

然后将其加入您的明细表。像这样。 ( http://sqlfiddle.com/#!9/efbef6/9/0 )

SELECT a.zip, a.name, b.names
FROM blubb a
JOIN (
SELECT nb,
GROUP_CONCAT(name ORDER BY zip SEPARATOR '|') AS names
FROM blubb
GROUP BY nb
) b ON a.nb = b.nb
ORDER BY a.zip

关于mysql - SQL 连接名称在结果的其余部分丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46712553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com