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.ids (в данном случае 20) и table1.id 2 у него также не было строки, которая имела все table2.ids (в данном случае 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 и они вставляют комбинации, которые не существуют из этого перекрестного соединения.

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 для автоматического выполнения задачи.