2017-11-30 1 views
0

Durch Python, ziehe ich Daten aus einer JSON-Anfrage und Einfügen in eine Datenbank, aber ich möchte sicherstellen, dass diese Datensätze nicht bereits vor dem Einfügen vorhanden sind es ist da drin.SQL INSERT INTO wenn Datensatz nicht existiert (nicht aus einer zweiten Tabelle)

Ich weiß, ähnliche Fragen wurden zuvor gestellt, aber meine ist anders, weil meins nicht aus einer zweiten Tabelle abfragt. Wie gehe ich damit um?

Was ich habe es versucht, und ich einen falschen Syntaxfehler erhalte, bin

INSERT INTO table (col1, col2, col3) 
VALUES (val1, val2, val3) 
WHERE NOT EXISTS (select col1 FROM table WHERE col1 != val1) 

Kann jemand mir einen besseren Weg, um dieses Problem zu nähern? Vielen Dank.

+0

Verwenden Merge-Verfahren ist eine gute Lösung für diese –

+0

Merge für nur eine Zeile scheint zu viel. Ich habe immer @ tab-alleeman Lösung (siehe unten) für einen Einsatz verwendet. – SmartDev

Antwort

2
IF NOT EXISTS(SELECT ...) 
    INSERT ... VALUES ... 
+0

Danke! Ich habe es zu arbeiten mit dieser (falls jemand anderes in dieses Problem läuft und weitere Klärung benötigt) IF NOT EXISTS (SELECT col1 FROM Tabelle WHERE col1 = val1) INSERT INto Spalte1, Spalte2, Spalte3 Werte val1, val2, val3 – Emac

0

Sie können auch etwas tun:

INSERT INTO table (col1, col2, col3) 
SELECT val1, val2, val3 
WHERE NOT EXISTS (SELECT 0 FROM table WHERE col1 = val1) 

Beachten Sie, wie SELECT ist nicht Auswahl aus einer Tabelle. Es gibt einfach eine Zeile (val1, val2, val3) zurück, wenn die Bedingung gilt, und null Zeilen, wenn dies nicht der Fall ist.


BTW, können Sie, dass mehr schreiben kurz und bündig als ...

INSERT INTO table (col1, col2, col3) 
SELECT val1, val2, val3 
WHERE val1 NOT IN (SELECT col1 FROM table) 

... aber Vorsicht, dass in Gegenwart von NULL-Werte, diese not the exact equivalent ist.

+0

Hmm, ich bekomme einen Syntaxfehler, wenn ich das versuche. Ich bin mir nicht sicher, was ich falsch mache. – Emac

+0

@Emac Whoops, ich habe '== '(wie für C-ähnliche Sprachen üblich) anstelle von' = 'verwendet (wie von SQL gefordert). –

Verwandte Themen