【发布时间】:2021-05-19 16:13:55
【问题描述】:
我正在使用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 从my_table2 合并到new_column 其中my_table1.id = my_table2.id。
如果my_table2 中有多个带有my_table1.id = my_table2.id 的行,我想将它们全部合并到同一行中的new_column。
因此,我的表格的预期输出如下:
| id | new_column |
|---|---|
| 1 | George something DDD HHH FFF |
| 2 | Peter anything 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 | new_column |
|---|---|
| 1 | George something DDD |
| 1 | George something HHH |
| 1 | George something FFF |
| 2 | Peter anything LLL |
| 2 | Peter anything TTT |
Here you can see a MySQL fiddle.
我该怎么做才能收到预期的输出?
【问题讨论】:
-
考虑处理应用代码中数据显示的问题,见meta.stackoverflow.com/questions/333952/…
-
@Strawberry 我的问题已经解决了,但我仍然想知道你到底是什么意思。从现在开始,我将在 SO 中使用表格,而不是来自
phpMyAdmin的屏幕截图。直到今天我才知道这是可能的。我用这些表格更新了我的问题。这是你的意思吗? -
@Strawberry 我想我明白你的意思了:以后我会使用db-fiddle.com。
-
@Strawberry 我再次更新了我的问题。这是现在正确的方法还是我还有什么需要改进的地方?
-
我已重新格式化您的问题
标签: mysql sql concatenation left-join