我有3个名为table1
table2
和table3
的表格。 table3
包含具有table1.id
和table2.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)的行。任何帮助将不胜感激
答案 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
并插入那些交叉连接中不存在的组合。
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上添加触发器以自动完成任务。