2014-09-12 182 views
0

我在mysql中有兩個表,當我試圖根據公共列連接這兩個表時,它返回null,即使這兩個表中的列中的值都相同。在mysql中返回null的表連接

Table_1 structure : 

id    VARCHAR (!2) - index 
string1   VARCHAR (15) 
string2   VARCHAR (50) 
string3   VARCHAR (20) 
city    VARCHAR (50) 
zip    VARCHAR (20) 


Table_2 structure : 


string1   VARCHAR (15) -- index 
string2   VARCHAR (50) -- index 
string3   VARCHAR (20) 
city    VARCHAR (50) 
zip    VARCHAR (20) 
id_1    int (6) 

我使用的查詢:

爲ID_1
SELECT p.id, pr.id_1 
    FROM table_1 as p 
    LEFT JOIN table_2 as pr 
    ON p.string1 = pr.string1 
    AND p.string2 = pr.string2 
    AND p.city = pr.city 
    AND p.zip = pr.zip 

該查詢返回空值。在這兩個表格中,大多數行的列數都相同,我不明白爲什麼會發生這種情況。有人可以告訴我爲什麼會發生這種情況,爲什麼會發生這種情況。

數據模型:

TABLE_1

id_1 string1  string2 string3 city zip 
1  abc   cde   efg  ghi  00001-13 
2  cde   efg   abc  abc  00002  

id_2 string1  string2 string3 city zip 
3  abc   cde   efg  ghi  00001-13 
4  cde   efg   abc  abc  00002  

結果預期:

id_1 id_2 
1  3 
2  4 

的結果而獲得:

id_1 id_2  
1  null 
2  null 
+0

'pr'部分在查詢中被定義在哪裏? – summea 2014-09-12 16:11:28

+2

看看你的加入。你說p.string1 = pr.string1。這可以;但看看你和你的下一部分。 p.string1 = pr.string2。這兩個都不能被驗證。你的意思是p.string2 = pr.string2 – ItalianStallion 2014-09-12 16:13:19

+0

你應該編輯這個問題把'pr'別名放在'table2'之後。 – 2014-09-12 16:13:42

回答

1
SELECT p.id, pr.id_1 
    FROM table_1 as p 
    LEFT JOIN table_2 as pr 
    ON p.string1 = pr.string1 
    AND p.string1 = pr.string2 
    AND p.city = pr.city 
    AND p.zip = pr.zip 

我沒有看到在此查詢

demo

+0

在查詢中有錯別字更新了他們 – 2014-09-12 16:38:48

+0

這就是爲什麼這不是一個簡單的問題,我只是不知道發生了什麼。 – 2014-09-12 18:16:31

+0

@RahulNair轉儲您的表格(數據和結構)在這裏 – ghanbari 2014-09-12 19:20:09

0
SELECT p.id, pr.id_1 
    FROM table_1 as p 
    LEFT JOIN table_2 as pr 
    ON p.string1 = pr.string1 
    AND p.string2 = pr.string2 
    AND p.city = pr.city 
    AND p.zip = pr.zip; 

這個查詢是百分之百正確的任何問題。沒有錯誤輸出的理由。

+0

這是什麼使我困惑,你知道任何方式來檢查這些列中是否有任何隱藏的字符,或任何其他工具來比較這些表中的數據。 – 2014-09-12 18:15:26

+1

是的,它應該是可能的,可能會有一些隱藏的空間。 – 2014-09-12 18:25:10