2014-10-07 72 views
0

以下查询返回0行,即使这两个表包含多个匹配值。VARCHAR上的INNER JOIN

SELECT i.isrc, m.isrc FROM table1 i INNER JOIN table2 m ON i.isrc = m.isrc; 

因为isrc列是varchar类型,所以我怀疑它可能是表格排序问题。但是,将这两种排序方式更改为utf-8并没有解决问题。

这里有什么问题?

+0

确定这些值是否匹配? – tadman 2014-10-07 15:33:53

+0

加入varchar时,空格和隐形字符很容易阻止匹配,当它们看起来应该匹配时。 – 2014-10-07 15:34:47

+2

尝试修剪和上/下套管这两个值。 – 2014-10-07 15:34:48

回答

2

试试下面,

SELECT i.isrc, m.isrc 
FROM table1 i 
INNER JOIN table2 m 
ON UPPER(TRIM(i.isrc)) = UPPER(TRIM(m.isrc)) 

注:

  1. 修剪两侧的值
  2. 规范化的情况下
+0

铁杆反“愚蠢的错误”代码。我喜欢它;) – Alex 2014-10-07 15:40:48

0

在看看你认为是matc每个表兴值:

select src, sum(in1) as in1, sum(in2) as in2 
from ((select distinct i.isrc as src, 1 as in1, 0 as in2 from table1 i) union all 
     (select distinct m.isrc as src, 0 as in1, 1 as in2 from table1 m) 
    ) t 
group by src; 

做上述前,你可能会发现有用的摘要:

select in1, in2, count(*), min(src), max(src) 
from (select src, sum(in1) as in1, sum(in2) as in2 
     from ((select distinct i.isrc as src, 1 as in1, 0 as in2 from table1 i) union all 
      (select distinct m.isrc as src, 0 as in1, 1 as in2 from table1 m) 
      ) t 
     group by src 
    ) s 
group by in1, in2; 

的是相同的group by并且是同为一个比较的语义可能不相同(最后的空格会影响group by的相似性,但不应影响相似性)。但是,这会让你知道在两个表中可以匹配什么。

+0

谢谢你,戈登。这证实没有检测到相同的值。至于为什么,我还不清楚。我试着trim()和upper()的值。在我看来,它们是相同的,并且在两个表中具有匹配值的单独SELECT语句返回相应的行。 – DigitalMusicology 2014-10-07 16:31:23