2010-07-01 84 views
1

夥計們,我有兩個基本表(idfirst_name)。在MySQL中比較一個表與另一個表

我想運行表1對錶2,刪除重複,並吐出表1

做什麼用PHP/MySQL來做到這一點,最簡單的方法的清潔的版本?

謝謝。

+0

你的意思是「刪除從表1中的一切,在表2中複製」或「添加表1和表2中的內容一起,然後刪除任何重複「? – gkrogers 2010-07-01 11:27:07

回答

2

這將刪除t1的所有記錄也存在於t2,讓你有一個精簡t1,但可能在t2記錄中不存在t1

DELETE FROM table1 t1 
WHERE t1.id IN 
    (SELECT id from table2 t2 
     WHERE t2.id = t1.id AND t2.first_name = t1.first_name 
    ) 

*您可以根據Brian Hooper的建議,要考慮使用EXISTS而不是IN

這將兩個表合併成第三個表(t3),沿途刪除重複:

SELECT * INTO t3 
FROM t1 UNION SELECT * FROM t2 

這將用於SQL Server(絕對)和MySQL(我認爲),但MySQL的支持CREATE TABLE table_name AS select-statement ,所以你可以使用:

CREATE TABLE t3 AS 
(SELECT * FROM t1 UNION DISTINCT SELECT * FROM t2) 

*的DISTINCT關鍵字是可選的 - 這是默認的行爲

1
DELETE FROM table1 t1 
    WHERE EXISTS (SELECT * 
         FROM table2 t2 
         WHERE t2.id   = t1.id AND 
          t2.first_name = t1.first_name); 

我更喜歡IN的存在,在過去我遇到了麻煩,花了很長時間。

0

爲什麼不使用

DELETE FROM table1 WHERE first_name IN (SELECT first_name from table2) 

? 糾正我,如果我錯過了什麼。

+0

沒有什麼可以表明first_name是唯一的。例如。你可以有一張桌子充滿約翰和吉姆,但有不同的ID。在這種情況下,除非他們出現在具有相同ID的表2中,否則您希望保留它們。 – gkrogers 2010-07-01 11:24:31

+0

@ gkrogers,哦,這是正確的。感謝糾正。 – Young 2010-07-01 11:47:16

0

這是不使用子查詢(未測試):

DELETE t1 
FROM table1 t1 
JOIN table2 t2 
    ON t2.id = t1.id 
    AND t2.first_name = t1.first_name 
相關問題