以下查詢返回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