SQL insert, если строка не существует
у меня есть 3 таблицы, называемые table1
table2
и table3
. the table3
содержит записи, которые имеют table1.id
и table2.id
и некоторые другие столбцы также. Поэтому мне нужно сделать следующее. для каждой записи в таблице 1 мне нужно увидеть, есть ли в table3 строка, содержащая эту table1.id и любой другой table2.id если такой записи нет, я хочу ее вставить.
так вот пример.
предположим, таблица1
1 ... ... ...
2 ... ... ...
table2
10 .. .. ..
20 .. .. ..
table3
1 | 10 .. .. ..
2 | 20 .. .. ..
мне нужно добавить
1 20 .. .. ..
и
2 10 .. .. ..
строки в table3, потому что для table1.id
1 у него не было строки, которая имела все table2.id
s (в данном случае 20) и table1.id
2 у него также не было строки, которая имела все table2.id
s (в данном случае 10) в нем. любая помощь будет оценена
4 ответов
Если я правильно понял, попробуйте это:
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
и они вставляют комбинации, которые не существуют из этого перекрестного соединения.
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 для автоматического выполнения задачи.