2014-10-07 39 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