如果重复,则更新具有新值的单元格

时间:2017-10-14 14:09:35

标签: mysql sql group-by having

我有一张植物表,其中一些具有相同的通用名称。如果植物与其他植物共有共同名称,我想在通用名称后面加上括号中的属和种,以避免混淆。值得注意的是,并非所有植物都有一个共同的名称。

为了测试它,我创建了一个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服务器版本对应的手册,以获得正确的语法   在第1行GROUP BY common_name HAVING COUNT('common_name') > 1附近

1 个答案:

答案 0 :(得分:1)

你不能这样做:library(fmsb) ## Create some bogus data MyData = matrix(abs(rnorm(40)), nrow=5, ncol=8) MyData = data.frame(t(apply(MyData, 1, sort))) colnames(MyData) = LETTERS[1:8] ## Compare the two radarcharts par(mfrow=c(1,2)) radarchart(MyData, maxmin=FALSE, title="Counter-Clockwise") radarchart(MyData[,c(1, 8:2)], maxmin=FALSE, title="Clockwise") 不要跟你的GROUP BY一起去。{1}}。

以下是如何操作:

SET CONCAT

SQL Fiddle

MySQL 5.6架构设置

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

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
)

<强> Results

select * from plants