#mysql #sql-insert
#mysql #sql-вставка
Вопрос:
Предположим, у нас есть
Таблица A
field 1 | field 2
orange | fruit
apple | fruit
и
Таблица B
field 1 | field 2
orange | fruit
lemon | fruit
И хотите вставить только строки из таблицы B в таблицу A, которые не совпадают в поле 1, чтобы таблица A стала:
Таблица A
field1 | field2
orange | fruit
apple | fruit
lemon | fruit
Я пробовал
insert into tableA (field1, field2)
select field1, field2 from tableB
where not exists
(select * from tableA as a join tableB as b on a.field1 = b.field1)
(без вставки)
и
insert into tableA (field1, field2)
select field1, field2 from tableA as a left join tableB as b on a.field1 = b.field1
union
select field1, field2 from tableA as s right join tableB as b on a.field1 = b.field1
where a.field1 != b.field1
(неправильная вставка)
Комментарии:
1. Что-то вроде:
INSERT INTO tableA (field1, field2) SELECT b.field1, b.field2 FROM tableA a LEFT JOIN tableB b USING field1 WHERE a.field1 IS NULL
я думаю, это то, что вы ищете. Начните с определения нужного выбора (все строки из TableB, которых нет в TableA), а затем вставьте только эти строки.2. вопрос uri trymysql:lab2017:basicops:uu579distantaystipulate
Ответ №1:
У вас не совсем NOT EXISTS
правильное выражение, оно должно смотреть на значение, из tableB
которого вы пытаетесь вставить:
INSERT INTO tableA (field1, field2)
SELECT field1, field2
FROM tableB b
WHERE NOT EXISTS (SELECT * FROM tableA a WHERE a.field1 = b.field1)
Вывод SELECT * FROM tableA
после этого запроса:
field1 field2
orange fruit
apple fruit
lemon fruit
Ответ №2:
вы можете просто использовать union для этого или использовать приведенный ниже код
INSERT INTO Table A SELECT * FROM Table B
WHERE NOT EXISTS (SELECT 1 FROM TABLE A Data
WHERE A.field1 = Data.field1 AND
A.field2 = Data.field2)
Ответ №3:
Вероятно, это не лучшее решение, но это решение с использованием объединений сработало для меня:
INSERT INTO A(F1,F2)
SELECT *
FROM A NATURAL RIGHT JOIN B AS TAB
WHERE TAB.F1 NOT IN (
SELECT F1
FROM A NATURAL JOIN B
);