Как сделать INSERT INTO обновленными данными из другой таблицы? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть новая таблица (называемая «NewTable»), которая создана с данными из двух таблиц (t1 и t2). Я пытаюсь ВСТАВИТЬ любые новые данные в t1 и t2 В «NewTable». См. Пример ниже.

NewTable:

id | col1 | col2 | col3 | col4 |

t1:

id | col1 | col2 | col5 | col6 |

t2:

id | col3 | col4 | col7 | col8 |

мой сценарий:

INSERT NewTable (id, col1, col2, col3, col4)
SELECT t1.d1, col1, col2, col3, col4
FROM NewTable left join t1 on NewTable.id = t1.id left join t2 on t1.id=t2.id
WHERE t1.id is NULL;

Я получил это сообщение об ошибке

Cannot insert the value NULL into column 'id', table 'New Table'; column does not allow nulls. INSERT fails.

Мне кажется, что мой скрипт отключен. Должен ли я использовать правое соединение вместо левого соединения или мне следует вместо этого поставить «WHERE NewTable is NULL»?

Спасибо за вашу помощь

1 Ответ

1 голос
/ 06 августа 2020

Если вы хотите вставить в NewTable строки из t1 и t2 с теми же id, которые еще не существуют в NewTable, тогда вы должны присоединиться с помощью INNER join t1 и t2, затем LEFT присоединиться к NewTable и вернуть несовпадающие строки:

INSERT INTO NewTable (id, col1, col2, col3, col4)
SELECT t1.id, t1.col1, t1.col2, t2.col3, t2.col4
FROM t1 INNER JOIN t2 ON t2.id = t1.id
LEFT JOIN NewTable ON NewTable.id = t1.id
WHERE NewTable.id IS NULL;
...