2014-01-14 5 views
6

У меня есть 3 стола под названием table1table2 и table3. table3 содержит записи, которые содержат table1.id и table2.id и некоторые другие столбцы. Поэтому мне нужно сделать следующее. для каждой записи в таблице 1 мне нужно увидеть, есть ли в таблице 3 строка, содержащая этот table1.id и любой другой table2.id, если такой записи нет, я хочу ее вставить.Вставка Sql, если строки не существует

так вот пример.

предположим, что table1

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

table2

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

Таблица3

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

Мне нужно добавить

1 20 .. .. .. и 2 10 .. .. .. строк в таблице3, потому что для table1.id 1 у него не было строки, которая имела все table2.id s (в данном случае 20) и для table1.id 2 у нее также не было строки, которая имела все table2.id s (в данном случае 10) в ней , любая помощь будет оценена

ответ

11

Если у меня есть это право попробовать это:

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) 
+0

То есть. спасибо – Dimitri

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 
+0

Осторожно - это может привести к состоянию гонки –

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; 
0

Другой синтаксис будет:

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

И, кроме того, вы можете добавить триггеры t1 и t2 для автоматического выполнения задачи.

Смежные вопросы