繁体   English   中英

如果行不存在则插入Sql

[英]Sql insert if row does not exist

我有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 .. .. ..2 10 .. .. ..行到table1.id因为table1.id 1它没有所有table2.id s(在这种情况下为20)和table1.id 2它也没有包含所有table2.id s(在本例中为10)的行。 任何帮助,将不胜感激

如果我做得对,试试这个:

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)

试试这个:

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

您还可以进行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;

另一种语法是:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM