2013-02-26 3 views
0

두 필드에 고유 한 제약 조건이있는 테이블이 있습니다.중복 키 업데이트시

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 모든 client0로 시작, 증분 정수를 포함하는 것, 그래서를 업데이트 할. 나는 이런 식으로 만들려고 노력 해요 :

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를 받고. 깨닫지 못해 뭐가 잘못 됐니, 제발, 도와주세요.

Btw : 원하는 결과를 얻으려면 더 좋은 방법이 있습니까?

답변

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 
+0

그러나'VALUES (order_column)는'항상 0입니다! – k102

+0

무엇을 실행하면'중복 키 ON UPDATE order_column = order_column + 1' –

+0

오류가'Column 'order_column'필드 목록에 모호합니다' – k102

관련 문제