2017-10-14 78 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 | 
相關問題