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

+0

varchar에서 조인 할 때 공백과 보이지 않는 문자가 일치해야하는 것처럼 보이는 경우 일치를 쉽게 방지 할 수 있습니다. –

+2

트리밍 및 상하부 케이싱 두 값을 사용해보십시오. –

답변

2

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

참고, 아래 시도해보십시오에서 봐

  • 정상화

    1. 양쪽에 값을 트림 경우
  • +0

    하드 코어 안티 "어리석은 실수"코드가 있습니다. 나는 그것을 좋아한다;) – Alex

    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; 
    

    위를 수행하기 전에, 당신이 도움이 요약 찾을 수 있습니다 : 비교를 위해 동일을 group by 동일한되는 및 인을위한

    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의 유사성에 영향을 미치지 만 평등성에 대한 유사성에는 영향을 미치지 않아야합니다. 그러나 이렇게하면 두 테이블에서 일치 할 수있는 항목을 알 수 있습니다.

    +0

    고맙다, Gordon. 이는 동일한 값이 감지되지 않음을 확인합니다. 나는 아직도 불분명하다. 나는 trim()과 upper()를 시도했다. 내 눈을 그들은 동일하며 별도의 SELECT 문을 두 테이블의 일치하는 값으로 해당 행을 반환합니다. – DigitalMusicology