2016-06-29 4 views
2

내가 2 테이블 A와 BNULL 가입

표 A

subgroup | maingroup | 
------------------------------------------ 
NULL  | A  | 
NULL  | A  | 
Top  | B  | 
Top  | B  | 

테이블 B

subgroup 
---------------  
top    
NULL  

내가이 쿼리를 실행하고 있습니다.

select * from a 
join b 
on a.subgroup=b.subgroup 
group by a.subgroup,a.maingroup,b.subgroup 

나는이 출력을 얻고있다

subgroup | maingroup | subgroup  
------------------------------------------------------- 
Top  | B  | Top 

NULL이 일치하고 NULL 널처럼 나에게 출력을 제공하지 않는 이유는 나의 관심사입니다.

SELECT * 
FROM a INNER JOIN b 
    ON a.subgroup = b.subgroup OR (a.subgroup IS NULL AND b.subgroup IS NULL) 
GROUP BY a.subgroup, a.maingroup, b.subgroup 

: 당신이 가입 중에 일치하도록 두 테이블에서 NULL 값을 원하는 경우에 나는 MSSQL

+1

가능한 중복을

SELECT * FROM a INNER JOIN b ON IsNull(a.subgroup,'') = IsNull(b.subgroup,'') GROUP BY a.subgroup, a.maingroup, b.subgroup 
[IS NULL 사이에 어떤 차이가 = NULL] (http://stackoverflow.com/questions/3777230/is-there-any-difference-between-is-null-and- null) – jpmc26

답변

6

을 사용하고

은 하나의 옵션은 ON 절에 명시 적 조건을 추가하는 것입니다 명시 적 조인 조건 a.subgroup IS NULL AND b.subgroup IS NULL에 대한 필요성은 두 개의 NULL 값을 비교하여 같음을 알면 결과는 알 수없는 또 다른 방법 인 NULL을 반환합니다. 당신이 가입 중에 일치하도록 두 테이블에서 NULL 값을 원하는 경우

SELECT * FROM a INNER JOIN b 

ON ISNULL(a.subgroup,'') = ISNULL(b.subgroup,'') 

GROUP BY a.subgroup, a.maingroup, b.subgroup 
+1

당신이 나를 때려 - 당신을 위해 몇 가지 바이올린 : http://sqlfiddle.com/#!9/b913c1/1 – sgeddes

+0

@sgeddes 두 번 게시하지 감사합니다. –

+0

아무런 걱정없이 제출하기 전에 내 소식을 보지 못했습니다. 좋은 작업. – sgeddes

0

간단한 시도, 당신은 IsNull 기능을 사용할 수 있습니다.

+0

'NULL'을 '0'으로 처리하려고하거나 '0'(또는 대체해야하는 다른 값)을 실제 데이터에 존재하지 않는 센티널 값으로 사용할 수 있다고 가정합니다. –

+0

업데이트 된 답변 확인 –

1

로 ISNULL 기능