2011-01-04 5 views
1

adhex가 기본 키인 3 개의 필드가있는 예제 테이블이 있습니다. 현재 ASP와 레코드 셋을 사용하고 있으며 매우 느리고 PHP와 더 빠른 시스템으로 옮겨야합니다. INSERT ...님께 서 위키 백화 키 업데이트를 사용해 보시길 권장합니다!중복 조건의 MySQL 조건부 삽입

그러나 조건부 업데이트를 원하고 해결할 수 없습니다!

지금까지 전혀 작동하지 않는 아래 항목이 있습니다.

내가해야 할 일은 업데이 트에있는 값에 mtime이> 테이블에있는 경우 reg 및 mtime을 업데이트하는 것입니다. 나는 이것이 단순한 것이라고 확신하지만 몇 가지 예를 보더라도 조건부를 해결할 수는 없다.

INSERT INTO testTable (adhex,reg,mtime) 
VALUES ('00B0BA','reg-1','1294129605') 
ON DUPLICATE KEY UPDATE reg='ZsS-SLD' 
    CASE 
    WHEN mtime < values(mtime) THEN values(mtime) 
    END 

답변

2

INSERT ... ON DUPLICATE에 대한 구문을 자세히 살펴보십시오. ON DUPLICATE KEY UPDATE 다음에 시퀀스 = 문이옵니다. 다음과 같이 시도하십시오 :

INSERT INTO testTable (adhex,reg,mtime) 
VALUES ('00B0BA','reg-1','1294129605') 
ON DUPLICATE KEY UPDATE reg=IF(mtime < VALUES(mtime), 'ZsS-SLD', reg), 
    mtime=IF(mtime < VALUES(mtime), VALUES(mtime), mtime) 
+1

실제로 저는 두 개의 서로 다른 문장을보고 값을 삽입합니다! 이것을 하나의 if로 차단 한 다음 표준 업데이트 문을 실행하는 방법이 있습니까? –

+1

아니요, 구문에서 허용하지 않습니다. 식에 열을 설정할 수는 없으며, 앞에서와 같이 * 열 * = * 식 *으로 '중복되는 키 업데이트'를 따라야합니다. – outis

1

그렇다고해서 CASE이 작동하지 않습니다. SQL 코드가 아닌 값을 리턴합니다.

Insert into testTable (adhex,reg,mtime) 
VALUES ('00B0BA','reg-1','1294129605') 
ON DUPLICATE KEY UPDATE reg=/*'ZsS-SLD'*/ CASE -- Note the commented out value 
    WHEN mtime < values(mtime) THEN values(mtime) 
    -- Notice there's not ELSE: you'll get NULL if condition is not matched 
END 
+0

reg가 null이 아니어야한다고 말하는 오류가 발생합니다. 동일한 쿼리에서 reg (및 다른 필드)를 어떻게 업데이트합니까? –

+1

ELSE 절에 적절한 값을 설정하고 필요한만큼의 열을 업데이트하면됩니다. –