2017-10-14 76 views
1

我有一张植物表格,其中一些具有相同的通用名称。如果植物与其他植物共用同一个名称,我想在通用名称后加上括号内的属和种,以避免混淆。值得注意的是,并非所有植物都有一个共同的名字使用新值更新单元格(如果其重复)

为了测试它,我创建了一个common_name2列。

我写了下面的脚本:

UPDATE `plants` 
    SET `common_name2` = CONCAT(`common_name`, ' (', `genus`, ' ', `species`, ')') 
WHERE `common_name` != '' 
GROUP BY `common_name` 
HAVING COUNT(`common_name`) > 1 

但我发现了以下错误,我想不通:

#1064 - 你在你的SQL语法错误;检查对应于你的MySQL服务器版本的手册正确的语法使用 附近GROUP BY common_name HAVING COUNT('common_name') > 1第1行

+0

只是一个建议。您可以尝试使用http://sqlfiddle.com/创建一个包含一些示例数据的SQL小提琴。对其他人来说会更容易。 – kkaosninja

回答

1

你不能做到这一点是这样的:你的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 | 
相关问题