вставить откуда условие на обеих таблицах - PullRequest
0 голосов
/ 18 мая 2018

Я хочу кормить table1 name с помощью table2 name на основе ссылки на мой table1 в моем table2 (id).

Как этого добиться?что-то вроде:

insert into table1 (name)
  select name from table2
  where table2.id = table1.table2Id;

Предложение where не знает table1 и не может применить условие.

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете использовать предложение FROM (с JOIN) в запросах INSERT..SELECT, а также в запросах UPDATE и / или DELETE.

Если вы хотите вставить новые записи в таблицу1 на основеДля данных из таблицы 2 вам может потребоваться только убедиться, что в таблицу 1 не будут пытаться вставить данные, которые могут нарушить какие-либо ограничения.

Предложение WHERE в вашем примере INSERT-запроса может быть недопустимым в этомслучай, так как кажется, что в таблице1 уже есть соответствующие записи.(Могут быть возможные исключительные сценарии, которые оправдывают такой запрос, но я не буду здесь подробно останавливаться на этих сценариях, поскольку ваш вопрос не указывает, что это уместно в вашем случае.)

Пример для вставки записей в таблицу1на основе (связанных) данных в таблице1 и таблице2:

INSERT INTO table1 (name)
SELECT table2.name
FROM table2 JOIN table1 ON table1.[ref] = table2.[ref] --use some sensible relation logic between table1 and table2 here
WHERE ... --check for valid data here

Если вы хотите обновить существующие записи в таблице1 данными из таблицы2, вы, вероятно, можете использовать запрос UPDATE вместо запроса INSERT.Опять же, вам следует убедиться, что вы не пытаетесь обновить данные, которые нарушают какие-либо ограничения.

Пример обновления записей в таблице1, которые соответствуют данным в таблице2:

UPDATE table1
SET name = table2.name
FROM table2 
WHERE table2.id = table1.id --or use some other sensible relation logic between table1 and table2 here (together with other validation logic)

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

...