mysql - CONCAT with JOIN:每个 id 只创建一行,尽管 id 有多个行
问题描述
我正在使用MySQL
.
我有以下示例架构:
CREATE TABLE `my_table1` (
`id` int(5) NOT NULL,
`column1` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`column2` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `my_table1` (`id`, `column1`, `column2`) VALUES
(1, 'George', 'something'),
(2, 'Peter', 'anything');
CREATE TABLE `my_table2` (
`id` int(5) NOT NULL,
`column1` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `my_table2` (`id`, `column1`) VALUES
(1, 'DDD'),
(1, 'HHH'),
(1, 'FFF'),
(2, 'LLL'),
(2, 'TTT');
我想将 的所有列合并my_table1
到一个名为new_column
. 此外,我还想将column1
from合并my_table2
到new_column
where my_table1.id = my_table2.id
。
如果有多个行,my_table1.id = my_table2.id
我my_table2
想将它们全部合并到new_column
同一行中。
因此,我的表格的预期输出如下:
ID | 新列 |
---|---|
1 | 乔治的东西 DDD HHH FFF |
2 | 彼得任何东西 LLL TTT |
我尝试了以下查询:
SELECT my_table1.id
, CONCAT_WS(' ', my_table1.column1, my_table1.column2, my_table2.column1) AS new_column
FROM my_table1
LEFT
JOIN my_table2
ON my_table1.id = my_table2.id;
我得到以下结果:
ID | 新列 |
---|---|
1 | 乔治的东西 DDD |
1 | 乔治的东西 HHH |
1 | 乔治的东西 FFF |
2 | 彼得任何东西 LLL |
2 | 彼得什么都TTT |
我该怎么做才能收到预期的输出?
解决方案
这是一个JOIN
和GROUP_CONCAT()
:
SELECT
my_table1.id,
CONCAT_WS (' ', my_table1.column1, my_table1.column2, GROUP_CONCAT(my_table2.column1 SEPARATOR ' ')) AS new_column
FROM my_table1
LEFT JOIN my_table2
ON my_table1.id = my_table2.id
GROUP BY my_table1.id
推荐阅读
- javascript - 检测集合中最靠近窗口的元素
- sql - 如何根据 fetch cteTable 更新某个字段
- google-analytics - 我是否需要在谷歌分析中为每个 android 应用程序创建一个属性?
- angular - 云构建不适用于不同的环境角度
- firebase - Firebase 部署错误“错误:函数未正确部署。”
- python - pyqt中QMenu的圆角
- asp.net-mvc - 添加更多 65 列时数据表给出错误?
- swift - 主机应用程序关闭时如何在 Widget iOS 14 中重新加载从 CoreData 获取数据
- javascript - 在 javascript 中检索和修改 HTML div
- python - 如何修复 ValueError: not enough values to unpack (expected 2, got 1)