更换INTO ...重复更新密钥更新

时间:2013-02-26 11:40:00

标签: mysql sql-update

我的桌子上有两个独特的约束。

CREATE TABLE `targets` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `client` SMALLINT(6) UNSIGNED NOT NULL,
    -- some more fields here
    `order_column` INT(10) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `client_order_column` (`client`, `order_column`)
)

现在我想更新它,order_column将包含增量整数,从0开始,每个client值。我试图这样做:

replace into targets (
    `id`,
    `client` ,
    `order_column`
) 

(select     
    `id`,
    `client` ,
    0 as order_column from targets
    )
on duplicate key update
    order_column = order_column + 1

但在最后一行获得syntax error。我无法意识到,有什么不对,所以,请帮助我。

顺便说一句:有没有更好的方法来达到预期的效果?

1 个答案:

答案 0 :(得分:0)

INSERT INTO targets (id, client, order_column) 
SELECT  a.id, a.client , 0 as order_column 
FROM    targets a
        ON DUPLICATE KEY
        UPDATE order_column = a.order_column + 1