2014-02-28 2 views
1

두 개의 열을 기반으로 테이블에 고유 제한 조건을 추가하려고합니다. 테이블에는 현재 고유하지 않은 두 개의 인스턴스가 있습니다. (고유 한 제약 조건을 벗어나는 4 개의 행이 있음을 의미).자체 및 하위 선택 조인을 사용하여 테이블 업데이트

이전 사례가 더 낮은 ID 인 경우 각각에서 '이전'행을 업데이트하고 싶습니다.

검색어 :

UPDATE `promo` p1 
INNER JOIN promo p2 
ON p2.code = p1.code 
SET deleted_at = NOW(), `code` = CONCAT(p1.`code`, p1.id) 
WHERE p1.id < p2.id 
AND p1.`code` IN 
(SELECT `code` FROM promo GROUP BY `code`, deleted_at HAVING COUNT(id) > 1) 

을하지만 오류 얻을 :

Error Code: 1052 Column 'deleted_at' in field list is ambiguous를 이것은 내가 지금까지있어 것입니다.

나는에 설정 부분을 변경 시도 :

SET p1.deleted_at = NOW(), p1.`code` = CONCAT(p1.`code`, p1.id) 

하지만 나는 Error Code: 1093 You can't specify target table 'p1' for update in FROM clause

바이올린 얻을 : http://sqlfiddle.com/#!2/16cc1/1/0

답변

1

이 하위 쿼리에 새로운 별칭을 제공함으로써이 시도

UPDATE `promo` p1 
INNER JOIN promo p2 
ON p2.code = p1.code 
SET p1.deleted_at = NOW(), p1.`code` = CONCAT(p1.`code`, p1.id) 
WHERE p1.id < p2.id 
AND p1.`code` IN 
(SELECT t.`code` FROM 
(SELECT `code` FROM promo GROUP BY `code`, deleted_at HAVING COUNT(id) > 1) t 
) 
+1

신난다. 그런 빠르고 정확한 답변을 해주셔서 너무 감사드립니다 !! – Jessica

관련 문제