2013-08-03 3 views
4

Моя схема таблица выглядит следующим образом: (Жирный имя столбца первичного ключа)Выберите данные из одной таблицы и вставить в другую существующую таблицу, которая не существует в таблице

Таблица 1: id1 - id2

Таблица 2: id2 - имя2

Таблица 3: id3 - name3

Таблица 4: ID1 - Id3

То, что я хочу сделать, это SQL код, который:

  1. Выберите данные в ID1 и id3 столбцов, для которых name2 = вход = name3
  2. Вставка в таблицу 4
  3. только вставить в 4, если id1, сочетание id3 не существует в таблице 4

в настоящее время я могу сделать шаг 1 и 2, но (если это можно сделать), я не могу получить синтаксис «нЕ сУЩЕСТВУЕТ» правильно для шага 3.

Это мой код в настоящее время:

INSERT INTO table4(id1, id3) 
SELECT id1, id3 
FROM table2 
INNER JOIN table1 ON table1.id2 = table2.id2 
INNER JOIN table3 ON table2.name2 = table3.name3 
WHERE name2 LIKE 'input' 

ответ

1

Здесь запрос вам нужно

insert into table4(id1, id3) 
select t1.id1, t3.id3 
from table2 as t2 
    inner join table1 as t1 on t1.id2 = t2.id2 
    inner join table3 as t2 on t2.name2 = t3.name3 
where 
    t2.name2 like 'input' and 
    not exists (
     select * 
     from table4 as t4 
     where t4.id1 = t1.id1 and t4.id3 = t3.id3 
    ) 

как совет - я предлагаю вам всегда использовать псевдонимы (и относятся к колонку, как alias.column_name) в запросах, это поможет вам избежать ошибок и ваши запросы будут быть более читабельным.

+0

Спасибо, это сработало, и я не знал об алиасах – Menlo123

0

Я думаю, что вы ищете для этого

INSERT INTO table4(id1, id3) 
SELECT id1, id3 
FROM table2 
INNER JOIN table1 ON table1.id2 = table2.id2 
Left JOIN table3 ON table2.name2 = table3.name3 
WHERE name2 LIKE 'input' and table3.name3 is null 

или что-то подобное. Left (external join) получает все записи в таблице2 независимо от того, существуют они или нет. Если они не являются table3.name3, будет нулевым, так что это те, которые вы хотите.

0

Ваш текущий запрос одобрен для вставки, , но если вы хотите запретить вставки, если эта комбинация уже существует, просто добавьте первичный ключ в таблицу4, содержащий эти 2 столбца.

В запросе сделать:

INSERT INTO table4(id1, id3) 
SELECT id1, id3 
FROM table2 
INNER JOIN table1 ON table1.id2 = table2.id2 
INNER JOIN table3 ON table2.name2 = table3.name3 
WHERE name2 LIKE 'input' 
ON DUPLICATE KEY UPDATE id1=id1; 

, что это просто для создания запроса по-прежнему работать, если есть дубликат он не будет делать ничего.

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