[SQL] SQL Server는 누락 된 NULL 값 가입
SQLSQL Server는 누락 된 NULL 값 가입
나는 다음과 같은 두 테이블이 있다고 가정 :
Table1: Table2:
Col1: Col2: Col3: Col1: Col2: Col4:
a b c a b d
e <null> f e <null> g
h i j h i k
l <null> m l <null> n
o <null> p o <null> q
지금, 나는 COL1과 Col2의와 같은 모양에 전체 세트를 다시 가져 이러한 테이블을 조인 할 :
Result:
Col1: Col2: Col3: Col4:
a b c d
e <null> f g
h i j k
l <null> m n
o <null> p q
그래서, 나는 SQL을 같은 시도 :
SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4
FROM Table1 INNER JOIN Table2
ON Table1.Col1 = Table2.Col1
AND Table1.Col2 = Table2.Col2
내가 끝낼 수 있도록하지만, Col2의에서 NULL 값을 일치하지 않습니다 :
Result:
Col1: Col2: Col3: Col4:
a b c d
h i j k
어떻게 내가 찾고 있어요 결과를 얻을 수 있습니다?
감사!
해결법
-
==============================
1.조인에 대해 당신은 명시 적으로 할 수 있습니다 :
조인에 대해 당신은 명시 적으로 할 수 있습니다 :
SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4 FROM Table1 INNER JOIN Table2 ON (Table1.Col1 = Table2.Col1 or Table1.Col1 is NULL and Table2.Col1 is NULL) AND (Table1.Col2 = Table2.Col2 or Table1.Col2 is NULL and Table2.Col2 is NULL)
실제로, 나는 가능성 상태 조인 COALESCE ()를 사용하는 것입니다 :
SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4 FROM Table1 INNER JOIN Table2 ON (coalesce(Table1.Col1, '') = coalesce(Table2.Col1, '')) AND (coalesce(Table1.Col2, '') = coalesce(Table2.Col2, ''))
어디 '가 아닌 테이블 중 하나의 값이 될 것입니다.
주의 그냥 단어. 대부분의 데이터베이스에서 사용하여 이러한 구조의 인덱스의 사용을 방지 할 수 있습니다.
-
==============================
2.(왼쪽) 외부 대신 null로 행을 포함하는 가입 내부의 가입.
(왼쪽) 외부 대신 null로 행을 포함하는 가입 내부의 가입.
SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4 FROM Table1 LEFT OUTER JOIN Table2 ON Table1.Col1 = Table2.Col1 AND Table1.Col2 = Table2.Col2
자세한 내용은 여기를 참조 : http://technet.microsoft.com/en-us/library/ms190409(v=sql.105).aspx
-
==============================
3.ISNULL 함수를 사용하여보십시오 :
ISNULL 함수를 사용하여보십시오 :
SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4 FROM Table1 INNER JOIN Table2 ON Table1.Col1 = Table2.Col1 AND ISNULL(Table1.Col2, 'ZZZZ') = ISNULL(Table2.Col2,'ZZZZ')
어디 ZZZZ '은 결코 테이블에 어떤 임의의 값입니다.
-
==============================
4.더러운 빠른 해킹 :
더러운 빠른 해킹 :
SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4 FROM Table1 INNER JOIN Table2 ON Table1.Col1 = Table2.Col1 AND ((Table1.Col2 = Table2.Col2) OR (Table1.Col2 IS NULL AND Table2.Col2 IS NULL))
-
==============================
5.당신은 그런 식으로 매핑 할 수 있습니다
당신은 그런 식으로 매핑 할 수 있습니다
select * from tableA a join tableB b on isnull(a.colID,'') = isnull(b.colId,'')
-
==============================
6.어떤 이유로 나는 가입을 외부로 작업에 가져올 수 없습니다.
어떤 이유로 나는 가입을 외부로 작업에 가져올 수 없습니다.
그래서 사용 :
SELECT * from t1 where not Id in (SELECT DISTINCT t2.id from t2)
-
==============================
7.조인 추가 조건을 사용해보십시오 :
조인 추가 조건을 사용해보십시오 :
SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4 FROM Table1 INNER JOIN Table2 ON (Table1.Col1 = Table2.Col1 OR (Table1.Col1 IS NULL AND Table2.Col1 IS NULL) )
from https://stackoverflow.com/questions/14366004/sql-server-join-missing-null-values by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 독특한 증분 값을 테이블에 업데이트 INT 열 (0) | 2020.06.24 |
---|---|
[SQL] CSV 파일에서 SQL 문 삽입 생성 (0) | 2020.06.23 |
[SQL] 최대 절전 모드에서의 ResultSet을 추출 할 수 (0) | 2020.06.23 |
[SQL] MySQL의 선택의 최소 / 최대 두 개 (또는 그 이상)의 주어진 값 중에서 (0) | 2020.06.23 |
[SQL] 왜 외래 키에 대한 단방향 one-to-many 연관을 방지하는 것이 좋습니다? [복제] (0) | 2020.06.23 |