如果行不存在则插入Sql

时间:2014-01-14 09:58:21

标签: sql tsql

我有3个名为table1 table2table3的表格。 table3包含具有table1.idtable2.id的记录以及其他一些列。所以我需要做以下事情。对于表1中的每条记录,我需要查看table3中是否有一行包含table1.id和任何其他table2.id如果没有这样的记录我想插入它。

所以这是一个例子。

假设table1

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

表2

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

表3

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

我需要添加

1 20 .. .. ..和 {3}}行2 10 .. .. ..行,因为对于table1.id 1,它没有包含所有table2.id s的行(在本例中为20)而对于table1.id 2它也没有拥有所有table2.id s(在本例中为10)的行。任何帮助将不胜感激

4 个答案:

答案 0 :(得分:15)

如果我说对了,试试这个:

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)

答案 1 :(得分: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

答案 2 :(得分: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;

答案 3 :(得分:0)

另一种语法是:

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

此外,您可以在t1和t2上添加触发器以自动完成任务。