2012-10-13 63 views
3

我想比較兩個表以獲取不同的數據。比較兩列以獲取不同的數據

tb1    tb2 
============== ============== 
|id| doc_name| |id| doc_summ| 
============== ============== 
|1 | 01180543| |1 | 01180543| 
|2 | Chord | ============== 
============== 

我想比較doc_namedoc_summ。從這個例子中結果必須是Chord

$q = mysql_query(" SELECT t1.doc_name FROM tb1 as t1, tb2 as t2 WHERE t1.doc_name != t2.doc_summ"); 
while ($row = mysql_fetch_array($q)){ 
    $doc_copy = $row['doc_name']; 
} 

但是結果仍然返回所有的數據。怎麼了?謝謝:)

+0

什麼數據你應該比較嗎?你能給出樣本記錄和期望的結果嗎? –

+0

@JohnWoo我已經添加了:) – bruine

+0

假設'tb2'也包含行'| 2 |吉他|'?你還想要那個輸出嗎? –

回答

6

可以使用LEFT JOIN加入兩個表。它所做的是它只能顯示錶1的記錄,如果它在表2

SELECT a.* 
FROM tb1 a 
     LEFT JOIN tb2 b 
      ON a.doc_name = b.doc_summ 
WHERE b.doc_summ IS NULL 
4

試試這個:

SELECT t1.doc_name 
FROM t1 
WHERE NOT EXISTS(SELECT t2.doc_summ 
        FROM t2 
        WHERE t2.doc_summ = t1.doc_name) 

查詢中的錯誤是你連接兩個表,所以你總能找到在T2的行已不能滿足where條件,因此顯示所有數據。

DEMO

+0

有人可以格式化代碼,我不知道如何使用移動版本做同樣的事情。 – Ankur

+0

非常感謝你Ankur :) – bruine

0

不匹配也許你可以試試這個

select tb1.doc_name from tb1 left join tb2 on tb1.id = tb2.id where tb1.doc_name != tb2.doc_summ; 
相關問題