簡體   English   中英

使用mysql將丟失的記錄從一張表插入到另一張表

[英]Insert missing records from one table to another using mysql

我不知道為什么我對這個查詢感到困惑。

我有兩個表: Table A900條記錄, Table B800條記錄。 兩個表都需要包含相同的數據,但存在一些不匹配。

我需要編寫一個 mysql 查詢來將缺少的100條記錄從Table A插入到Table B

最后, Table ATable B應該是相同的。

我不想先截斷所有條目,然后從另一個表插入。 所以請任何幫助表示贊賞。

謝謝你。

也可以為此使用LEFT OUTER JOIN 這將避免子查詢開銷(當系統可能為外部查詢的每條記錄執行一次子查詢時),如 John Woo 的回答,並避免做不必要的工作覆蓋現有的 800 條記錄,如 user2340435 的記錄:

INSERT INTO b
SELECT a.* FROM a
LEFT OUTER JOIN b ON b.id = a.id
WHERE b.id IS NULL;

這將首先選擇AB表中的所有行,包括兩個表中的所有列,但對於A存在且B不存在的行, B表的所​​有列都將為NULL 然后它只過濾后面的行( WHERE b.id IS NULL ),最后將所有這些行插入到B表中。

我認為您可以為此使用IN 這是您查詢的簡化

INSERT INTO table2 (id, name)
SELECT id, name
FROM table1
WHERE (id,name) NOT IN 
       (SELECT id, name
        FROM table2);

SQLFiddle 演示

正如您在演示中看到的, table2只有 1 條記錄,但在執行查詢后, 2 條記錄插入到table2

如果它是 mysql 並且表是相同的,那么這應該有效:

REPLACE INTO table1 SELECT * FROM table2;

當使用group byhaving子句時,代碼也有效。 測試 SQL 2012 (11.0.5058) Tab1 是新記錄的源,Tab 2 是要更新的目標。 選項卡 2 也有一個標識列。 (是的,伙計們,現實世界並不像實驗室作業那樣整潔干凈)

INSERT INTO Tab2
SELECT  a.T1,a.T2,a.T3,a.T4,a.Val1,a.Val2,a.Val3,a.Val4,-9,-9,-9,-9,MIN(hits) MinHit,MAX(hits) MaxHit,SUM(count) SumCnt, count(distinct(week)) WkCnt
FROM Tab1 a 
LEFT OUTER JOIN Tab2 b ON b.t1 = a.t1 and b.t2 = a.t2 and b.t3 = a.t3 and b.t4 = a.t4 and b.val1 = a.val1 and b.val2 = a.val2  and b.val3 = a.val3  and b.val4 = a.val4 
WHERE b.t1 IS NULL or b.Val1 is NULL
group by a.T1,a.T2,a.T3,a.T4,a.Val1,a.Val2,a.Val3,a.Val4 having MAX(returns)<4 and COUNT(distinct(week))>2 ;

這會將丟失的記錄插入到 Table1 中

INSERT INTO Table2
(Col1, Col2....)
(
SELECT   Col1, Col2,... FROM Table1
EXCEPT
SELECT  Col1, Col2,... FROM Table2
)

然后,您可以運行更新查詢以匹配不同的記錄。

UPDATE Table2
SET
Col1= T1.Col1,
Col2= T1.Col2,
FROM
Table T1
INNER JOIN
Table2 T2
ON
T1.Col1 = T2.Col1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM