반응형
SQL Server JOIN에 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
하지만의 NULL
값과 일치하지 않으므로 Col2
다음과 같이 끝납니다.
Result:
Col1: Col2: Col3: Col4:
a b c d
h i j k
원하는 결과를 어떻게 얻을 수 있습니까 ??
감사!
조인에 대해 명시 할 수 있습니다.
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, ''))
''
어느 테이블에도없는 값은 어디에 있습니까 ?
주의의 한마디. 대부분의 데이터베이스에서 이러한 구성을 사용하면 인덱스 사용이 방지됩니다.
NULLS가있는 행을 포함하려면 Inner Join 대신 Left Outer Join을 사용하십시오.
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
Try using ISNULL
function:
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')
Where 'ZZZZ'
is some arbitrary value never in the table.
Dirty and quick hack:
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))
you can just map like that
select * from tableA a
join tableB b on isnull(a.colID,'') = isnull(b.colId,'')
for some reason I couldn't get it to work with the outer join.
So I used:
SELECT * from t1 where not Id in (SELECT DISTINCT t2.id from t2)
ReferenceURL : https://stackoverflow.com/questions/14366004/sql-server-join-missing-null-values
반응형
'Program Tip' 카테고리의 다른 글
공유 환경 설정에서 String 배열을 넣고 가져옵니다. (0) | 2021.01.10 |
---|---|
Java에서 할 수있는 것처럼 PHP에서 한 번에 여러 변수를 할당 할 수 있습니까? (0) | 2021.01.10 |
단계별 Symfony2 파일 업로드 (0) | 2021.01.10 |
Rails : 연관 값을 기반으로하는 ActiveRecord 쿼리 (0) | 2021.01.10 |
RecyclerView 그리드에 불확실한 진행률 표시 줄을 바닥 글로 추가 (0) | 2021.01.10 |