2012-12-12 3 views
1

단일 SQL 문을 통해 업데이트 할 키/값 쌍 목록이 있습니다. 업데이트 값은 각 행마다 다릅니다. 다른 테이블의 값을 사용하여 동적 업데이트를 수행하는 것은 상당히 평범한 것 같습니다. 그러나 테이블에 값을 업데이트하지 않았으며 임시 테이블을 만들지 않으려 고합니다.고정 값 목록에 대한 SQL 업데이트 문

내가, 당신이 (다소 서투르게)에서의 장소 "테이블"을 구축 UNION ALL를 사용하여 수있는 다른 데이터베이스의 아마

UPDATE table 
SET update_column = IN(value1,value2) 
WHERE key_column IN(Key1 , Key2) 
AND Criteria_column = 'Criteria' 
+0

CASE/IIF stateemnt (사용중인 RDBMS에 따라 다름) 사용 방법은 어떻습니까? –

+0

키 값 쌍은 어디에 저장되어 있습니까? –

+0

나는 어플 리케이션 – Pynner

답변

1
PostgreSQL의에서

과 같은 일을 할 수 있도록하고 싶습니다 :

PostgreSQL을의 최신 버전에서
UPDATE table 
SET update_column = temp.value 
FROM (
    SELECT 'foo' AS id, 'bar' AS value 
     UNION ALL 
    SELECT 'baz' AS id, 'qux' AS value 
     UNION ALL 
    SELECT 'et' AS id, 'cetera' AS value 
) temp 
WHERE key_column = temp.id 
AND Criteria_column = 'Criteria'; 

,에서 적절한 테이블을 구축하기위한 구문은 향상되었습니다

UPDATE table 
SET update_column = temp.value 
FROM (
    VALUES ('foo', 'bar'), ('baz', 'qux'), ('et', 'cetera') 
) temp (id, value) 
WHERE key_column = temp.id 
AND Criteria_column = 'Criteria'; 
+0

에 감사드립니다. 오라클을 사용하고 있다고 말해야합니다.이 구문은 오라클에서 작동하지 않습니다. – Pynner

+0

@Pynner : 알겠습니다. 'UNION'또는 'UNION ALL'을 사용하여 쿼리를 연결할 수 있습니까? 나는 * 표준 SQL이라고 생각한다. 그렇지 않다면 오라클에 다른 구문이있을 수있다. 또한 테이블 이름'temp' 앞에'AS'를 추가하기 만하면됩니다. 그러나'UPDATE'에서'FROM'을 허용하는 것은 PostgreSQL 확장입니다.이 경우 다른 테이블을 가져 오는 다른 구문이 있어야합니다 (예 :'SET update_column = (SELECT. ..)'), 오라클이'UPDATE'에서 테이블 조인을 금지한다고 믿을 수 없기 때문에 - 너무 제한적입니다. –