2013-06-05 7 views
0
SELECT a.amount, CASE When d.name <> NULL Then d.name Else c.name End As 'name' 
from a 
JOIN b on a.id= b.id 
LEFT JOIN c on a.tokenId = c.tokenId 
LEFT JOIN d on a.tokenId = d.tokenId 

표 d가있는 경우 표에서 이름을 선택하려고 시도하고 있지 않은 경우 표에서 선택하십시오. 표 c. 이름 필드는 NULL로 반환되지만, 테이블 중 하나에서도 null이 아닌 것을 알고 있습니다.표 a에서 필드를 선택하십시오. 표 b에서 필드를 선택하지 않은 경우

누구든지 해결할 수 있습니까?

+0

가 d.name'로 시도하는 것은 다음 NULL이 아닌 ... ' – Jerry

답변

3

<> 연산자를 사용하여 null과 비교할 수 없습니다. is 연산자를 사용

SELECT a.amount, coalesce(d.name, c.name) As 'name' 
+0

어떤 이유로 그것은 이름 열에 여전히 null을 표시하고 있습니다 ... 조인을 변경하는 것에 대한 권장 사항은 무엇입니까? – William

+0

@ 윌리암 : 항상 'c'또는 'd'테이블에서 일치하는 레코드가 있는지 확인 하시겠습니까? 어느 쪽도 토큰을 가지고 있지 않으면, 당신은 양쪽 모두로부터'null'을 얻습니다. 어떤 레코드도 없다는 것이 가능하다면'coalesce' 함수에서 원하는 값을 사용하십시오. 예를 들어'coalesce (d.name, c.name, 'n/a')'와 같습니다. – Guffa

+0

RIGHT OUTER JOIN으로 변경하면 해당 이름이 표시되지만 그 앞에는 어떤 값도 없습니다 (예 : a.amount). – William

1

사용 COALESCE :

SELECT a.amount, CASE When d.name is not null Then d.name Else c.name End As 'name' 

당신은 또한 coalesce 기능을 사용할 수 있습니다

SELECT a.amount, COALESCE(d.name,c.name) "name" 
from a 
JOIN b on a.id= b.id 
LEFT JOIN c on a.tokenId = c.tokenId 
LEFT JOIN d on a.tokenId = d.tokenId 
관련 문제