2014-01-14 15 views
6

Ich habe 3 Tabellen table1table2 und . Die enthält Datensätze, die auch table1.id und table2.id und einige andere Spalten enthalten. Also muss ich Folgendes tun. Für jeden Datensatz in Tabelle 1 muss ich sehen, ob es in Tabelle 3 eine Zeile gibt, die diese Tabelle1.id und jede andere Tabelle2.id enthält, wenn es keinen solchen Datensatz gibt, den ich einfügen möchte.SQL einfügen, wenn Zeile nicht existiert

so hier ist das Beispiel.

suppose tabelle1

1 ... ... ... 
2 ... ... ... 

table2

10 .. .. .. 
20 .. .. .. 

table3

1 | 10 .. .. .. 
2 | 20 .. .. .. 

I

1 20 .. .. .. und hinzufügen müssenZeilen für die Tabelle3, denn für table1.id 1 hatte es nicht die Zeile, die alle table2.id s hatte (in diesem Fall 20) und für table1.id 2 hatte es auch nicht die Zeile, die alle table2.id s (in diesem Fall 10) hatte . jede mögliche Hilfe würde

Antwort

11

zu schätzen, wenn ich es richtig das habe versuchen:

INSERT INTO Table3 (Table1_id,Table2_id) 
SELECT Tablei.id,Table2.id FROM Table1,Table2 
    WHERE NOT EXISTS (SELECT 1 
          FROM Table3 
          WHERE Table3.Table1_id=Table1.ID 
           AND 
           Table3.Table2_id=Table2.ID) 
+0

das ist. danke – Dimitri

6

Versuchen Sie folgendes:

IF NOT EXISTS(SELECT 1 FROM Table3 WHERE Table3.Table1_ID = Table1.ID AND Table3.Table2_ID = Table2.ID) 
    INSERT INTO Table3(Table1_ID, Table2_ID) VALUES (ID1,ID2) 
END IF 
+0

Vorsicht - dies kann zu einem Wettlauf führen –

2

Sie auch eine cross join machen und ihnen die Kombinationen einsetzen, die nicht tun existieren aus diesem Cross Join.

sqlFiddle

insert into table3(col1, col2) 
    select t.a, t.b 
    from table3 
    right join (select table1.col as a, table2.col as b 
       from table1 
       cross join table2) t on t.a = table3.col1 and t.b = table3.col2 

    where table3.col1 is null 
    and table3.col2 is null; 
0

wäre eine andere Syntax sein:

INSERT INTO t3 (t1id, t2id) 
SELECT 
    t1.id 
    , t2.id 
FROM 
    t1,t2 
EXCEPT 
    SELECT t1id, t2id from t3 

Und außerdem können Sie Trigger auf T1 und T2 fügen Sie die Aufgabe automatisch zu erfüllen.

Verwandte Themen