2013-08-01 80 views
2

我有兩個表,第一個(table1)有28500行,另一個(table2)有17450行。 我想比較這些表,發現不存在table1行。在mysql中比較兩個表

SELECT * FROM table1 WHERE ID NOT IN (SELECT DISTINCT(ID) FROM table2) 

有什麼建議嗎?

+1

你可以發佈你的表結構嗎? –

+0

您的查詢是否無效... –

+0

@ahmadalbayati OP尚未描述OP是否使用PHP。 –

回答

10

試試這個:

SELECT table1.* 
FROM table1 
LEFT OUTER JOIN table2 
ON table1.id = table2.id 
WHERE table2.id IS NULL 

LEFT OUTER JOIN連接兩個表table1中被啓動,如果表2沒有聯排表2的所有字段爲空。所以,如果你把你的WHERE條件table2.id爲空,你只能在表1的行表2中不存在

+0

這是什麼意思SELECT table1。* –

+0

table1的所有字段 –

2

您可以通過執行左外連接並檢查所有不存在的行來解決此問題。 根據您是否想要查找table1中table1或table2中table1不存在的值,請嘗試以下操作。

SELECT * 
FROM table1 
LEFT OUTER JOIN table2 ON (table1.id = table2.id) 
WHERE table2.id IS NULL; 


SELECT * 
FROM table2 
LEFT OUTER JOIN table1 ON (table1.id = table2.id) 
WHERE table2.id IS NULL; 

SQL小提琴:http://sqlfiddle.com/#!2/a9390/8

+0

您可能想要使用ON而不是使用... – Mixthos

+2

table2.id = NULL不正確,請在使用NULL值比較字段時使用IS NULL –

+0

非常感謝!我在場上,但語法很模糊。 –

1

。利用該查詢:

SELECT 
    * 
FROM 
    table2 
LEFT JOIN 
    table1 
ON 
    table2.primary_key = table1 .primary_key 
WHERE 
    table1 .primary_key IS NULL 
; 
1

好,如果你想在回答PHP,那麼這裏就是它:

$sql=mysql_query("SELECT * FROM table1"); 
while($row=mysql_fetch_array($sql)) 
{ 
    $id=$row['id']; 
    $sql2=mysql_query("SELECT * FROM table2 WHERE id='$id'"); 
    $check=mysql_num_rows($sql2); 
    if($check==0) 
    { 
     echo $id." is not in table1<br>"; 
    } 
} 

我希望這可以幫助您

2

試試這個:

SELECT id, name 
FROM (
SELECT id, name FROM table1 
UNION ALL 
SELECT id, name FROM table2 
) tbl 
GROUP BY id, name 
HAVING count(*) = 1 
ORDER BY id; 

假設您有兩個表table1和table2具有相同的列和值。如果任何一個表有任何額外的行,然後使用下面的查詢,你可以得到無與倫比的結果。

閱讀:Compare two tables in MySQL