2017-10-12 3 views
0

Ich weiß mit Azure ist es möglich, eine IF x THEN UPDATE ELSE INSERT zu kombinieren, ist es möglich, das Gleiche mit Redshift SQL zu tun?(CASE und UPDATE-Anweisungen kombinieren) UPSERT in Amazon Redshift

Ich bin derzeit versucht, diesen Code:

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 

Dies gibt den Fehler:

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

Position: 132; 

(UPDATE state SET source='new source') 

: Ich bin so vergeben Rotverschiebung, wenn ich nicht auf der Hand etwas zu sehen bin.

+0

das ist nicht wie einfügen und aktualisieren funktionieren. Warum ist das mit Azurblau markiert? Sie können das Einfügen und Aktualisieren in Unterabfragen wie diesem nicht verwenden. lese die redshift/postgres docs auf update und füge sie ein. –

Antwort

0

Um Ihre erste Frage zu beantworten, hat Redshift SQL keine Flow-Flow-Anweisungen wie "If - Then - Else", also ist das nicht möglich, so wie Sie es versuchen.

Für Ihr spezielles Beispiel ist es nicht wirklich klar, was Sie erreichen wollen, aber wenn Sie die Zeile bedingt einfügen für „Test“, wenn es nicht existiert, kann man so etwas tun:

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' 
) 
;