2017-10-12 7 views
0

의 UPSERT 나는 Azure와 함께 IF x THEN UPDATE ELSE INSERT을 결합 할 수 있다고 알고 있는데, Redshift SQL을 사용하여 동일한 작업을 수행 할 수 있습니까?(CASE 및 UPDATE 문 결합) 아마존 Redshift

나는 현재이 코드를 시도하고있다 :

SELECT source, 
CASE WHEN (SELECT 1 FROM state WHERE name = 
'out_dev' AND environment = 'dev') > 0 
THEN 
(UPDATE state SET source='new source') 
ELSE (
INSERT state (source, name, load_time, hash, environment) 
VALUES ('test', 'out_dev', '2017-10-12 01:14:38', '"f324f873b05d0792a3192bc28f466835"', 'dev')) 
END 
FROM state 

이 오류를 반환

[Amazon](500310) Invalid operation: syntax error at or near "state" 

Position: 132; 

(UPDATE state SET source='new source') 

는 내가 뭔가를 분명보고 있지 않다 경우 용서 그래서 적색 편이에 새로운 오전.

+0

삽입 및 업데이트 작동 방식에 맞지 않습니다. 이 태그가 푸른 색으로 표시된 이유는 무엇입니까? 당신은 그런 하위 쿼리에서 삽입과 업데이트를 사용할 수 없습니다. 갱신 및 삽입시 redshift/postgres 문서를 읽으십시오. –

답변

0

첫 번째 질문에 답하기 위해 Redshift SQL에는 "If - Then - Else"와 같은 흐름 제어문이 없으므로이를 수행하려고 시도하는 방법으로 불가능합니다.

특정 예를 들어

, 그것은 당신이 달성하려고하는지 정말 분명하지 않다하지만 당신은 조건부 "테스트"에 대한 행을 삽입 할 경우 다음 존재하지 않는 경우 당신은 같은 것을 수행 할 수 있습니다

INSERT INTO state (source, name, load_time, hash, environment) 
SELECT 
    'test', 
    'out_dev', 
    '2017-10-12 01:14:38', 
    '"f324f873b05d0792a3192bc28f466835"', 
    'dev' 
WHERE NOT EXISTS 
    (
    SELECT 1 FROM state 
    WHERE name = 'out_dev' AND environment = 'dev' 
) 
;