Ich habe eine Tabelle, die mit der Zeit größer werden kann, und ich möchte einige ihrer Zeilen in eine andere Tabelle einfügen, aber ich möchte auch sicherstellen, dass ich die zuvor eingefügten Zeilen nicht dupliziere. Hier ist die Art der Bedingung für mein insert:

INSERT INTO SecondTable(Col1,Col2)
SELECT Col5,Col6
FROM
FirstTable ft
WHERE ft.RecType = 'ABC'

Wenn ich dies also weiter ausführe, werden immer wieder dieselben Zeilen eingefügt. Wie kann ich sagen, dass es nur eingefügt wird, wenn es nicht bereits vorhanden ist?

0
Bohn 18 Jän. 2019 im 21:33

3 Antworten

Beste Antwort

Sie können not exists verwenden:

INSERT INTO SecondTable(Col1,Col2)
    SELECT Col5,Col6
    FROM FirstTable ft
    WHERE ft.RecType = 'ABC' AND
          NOT EXISTS (SELECT 1 FROM SecondTable t2 WHERE t2.col1 = ft.col5 AND t2.col2 = ft.colt6);
2
Gordon Linoff 18 Jän. 2019 im 18:36

Generieren Sie eine eindeutige Einschränkung für die Tabelle mit den richtigen Spalten, die die Einheitlichkeit identifizieren. Dies hilft Ihnen auch dabei, die Integrität Ihrer Tabelle zu erhalten. Wenn Sie versuchen, Datensätze in das RDBMS einzufügen, wird eine Fehlermeldung angezeigt.

ALTER TABLE SecondTable
ADD UNIQUE (col1, col2, col3);
1
Derviş Kayımbaşıoğlu 18 Jän. 2019 im 18:38
INSERT INTO SecondTable(Col1,Col2)
SELECT Col5,Col6
FROM FirstTable ft
LEFT JOIN SecondTable st ON st.Col1 = ft.Col1
WHERE st.Col1 IS NULL AND ft.RecType = 'ABC'
-1
Mahdi_Babaei 19 Jän. 2019 im 11:17