[英]mysql insert from one table to another based on select
假設我們有
表 A
field 1 | field 2
orange | fruit
apple | fruit
和
表 B
field 1 | field 2
orange | fruit
lemon | fruit
並且只想將表 B 中與字段 1 上不匹配的行插入表 A,以便表 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
(錯誤插入)
您的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)
Output of SELECT * FROM tableA
查詢后:
field1 field2
orange fruit
apple fruit
lemon fruit
你可以簡單地使用 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)
這可能不是最好的解決方案,但這個使用連接的解決方案對我有用:
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
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.