以下查询返回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行,即使这两个表包含多个匹配值。VARCHAR上的INNER JOIN
SELECT i.isrc, m.isrc FROM table1 i INNER JOIN table2 m ON i.isrc = m.isrc;
因为isrc列是varchar类型,所以我怀疑它可能是表格排序问题。但是,将这两种排序方式更改为utf-8并没有解决问题。
这里有什么问题?
试试下面,
SELECT i.isrc, m.isrc
FROM table1 i
INNER JOIN table2 m
ON UPPER(TRIM(i.isrc)) = UPPER(TRIM(m.isrc))
注:
铁杆反“愚蠢的错误”代码。我喜欢它;) – Alex 2014-10-07 15:40:48
在看看你认为是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
的相似性,但不应影响相似性)。但是,这会让你知道在两个表中可以匹配什么。
谢谢你,戈登。这证实没有检测到相同的值。至于为什么,我还不清楚。我试着trim()和upper()的值。在我看来,它们是相同的,并且在两个表中具有匹配值的单独SELECT语句返回相应的行。 – DigitalMusicology 2014-10-07 16:31:23
确定这些值是否匹配? – tadman 2014-10-07 15:33:53
加入varchar时,空格和隐形字符很容易阻止匹配,当它们看起来应该匹配时。 – 2014-10-07 15:34:47
尝试修剪和上/下套管这两个值。 – 2014-10-07 15:34:48