2014-01-14 144 views
6

我有3個表叫table1table2table3table3包含的記錄有table1.idtable2.id以及其他一些列。所以我需要做以下事情。對於表1中的每條記錄,我需要看看在table3中是否有包含該table1.id和其他任何table2.id的行,如果沒有我想要插入的記錄。Sql insert if row does not exist

所以這裏是例子。

假設table1的

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

表2

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

表3

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

我需要添加

1 20 .. .. ..2 10 .. .. ..行到表3,因爲對於table1.id 1它沒有所有table2.id s(在這種情況下爲20)和table1.id 2的行,它也沒有所有的table2.id s(在此情況下爲10) 。任何幫助,將不勝感激

回答

11

如果我找到了正確的嘗試:

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

那就是。謝謝 – Dimitri

6

試試這個:

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

小心 - 這可能會導致競爭條件 –

2

你也可以做一個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

另一種語法是:

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

,此外,你可以在T1和T2添加觸發器來自動完成任務。

相關問題