你不能做到這一點是這樣的:你的GROUP BY
不要隨你SET CONCAT
去。
這裏是如何做到這一點:
UPDATE `plants`
SET `common_name2` = CONCAT(`common_name`, ' (', `genus`, ' ', `species`, ')')
WHERE `common_name` IN (
select `common_name`
FROM (select * from `plants`) plants
WHERE `common_name` != ''
GROUP BY `common_name`
HAVING COUNT(`common_name`) > 1
)
SQL Fiddle
的MySQL 5.6架構設置:
CREATE TABLE plants
(`id` int, `common_name` varchar(50), `common_name2` varchar(50), `genus` varchar(9), `species` varchar(12))
;
INSERT INTO plants
(`id`, `common_name`, `common_name2`, `genus`, `species`)
VALUES
(1, 'Roses', NULL, 'Rosa', 'Hulthemia'),
(2, 'Roses', NULL, 'Rosa', 'Hesperrhodos'),
(3, 'Roses', NULL, 'Rosa', 'Platyrhodon'),
(4, 'Roses', NULL, 'Rosa', 'Rosa'),
(5, 'Petunia', NULL, 'Petunia', 'axillaris'),
(6, 'Petunia', NULL, 'Petunia', 'integrifolia'),
(7, 'Cardinal', NULL, 'Lobelia', 'cardinalis'),
(8, 'Anthurium', NULL, 'Anthurium', 'andraeanum')
;
UPDATE `plants`
SET `common_name2` = CONCAT(`common_name`, ' (', `genus`, ' ', `species`, ')')
WHERE `common_name` IN (
select `common_name`
FROM (select * from `plants`) plants
WHERE `common_name` != ''
GROUP BY `common_name`
HAVING COUNT(`common_name`) > 1
)
查詢1:
select * from plants
Results:
| id | common_name | common_name2 | genus | species |
|----|-------------|--------------------------------|-----------|--------------|
| 1 | Roses | Roses (Rosa Hulthemia) | Rosa | Hulthemia |
| 2 | Roses | Roses (Rosa Hesperrhodos) | Rosa | Hesperrhodos |
| 3 | Roses | Roses (Rosa Platyrhodon) | Rosa | Platyrhodon |
| 4 | Roses | Roses (Rosa Rosa) | Rosa | Rosa |
| 5 | Petunia | Petunia (Petunia axillaris) | Petunia | axillaris |
| 6 | Petunia | Petunia (Petunia integrifolia) | Petunia | integrifolia |
| 7 | Cardinal | (null) | Lobelia | cardinalis |
| 8 | Anthurium | (null) | Anthurium | andraeanum |
只是一個建議。您可以嘗試使用http://sqlfiddle.com/創建一個包含一些示例數據的SQL小提琴。對其他人來說會更容易。 – kkaosninja