2014-09-12 97 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