2014-04-10 3 views
2

내가이 쿼리가 NULL 인 경우. 나는이 시도 0으로 NULL을 대체 할,하지만 작동하지 않습니다점검 하위 쿼리는

SELECT sid FROM (SELECT IFNULL(sid,0) AS sid FROM myTable WHERE keyword='tank') AS InnerTmp LIMIT 1 

답변

2

keyword = 'tank'인 행이 없으면 부질의가 0 행을 반환합니까?

다음은이를 해결하는 방법입니다. 외부 조인을 사용하여 적어도 하나의 행을 가져 와서 keyword = 'tank'가있는 행 집합에 일치 시키십시오. 그러한 행이 없으면 여전히 외부 조인의 다른 쪽에서 한 행을 반환합니다. 그런 다음 COALESCE()를 사용하여 sid를 더미 0 값으로 기본값으로 설정할 수 있습니다.

SELECT sid FROM (
    SELECT COALESCE(myTable.sid, t.placeholder) AS sid 
    FROM (SELECT 0 AS placeholder) AS t 
    LEFT OUTER JOIN myTable ON keyword='tank' 
) AS InnerTmp LIMIT 1 
1

문제는 sidNULL 경우에만 테스트하는 것입니다 만약 그렇다면 당신에게 SELECT 0, 그렇지 않은 경우 당신 ' 다시 0을 선택하십시오. IFNULL 조건을 만족하지 않으면 0 (FALSE)을 반환하기 때문입니다.

IF 절을 사용하고 ISNULL(sid)이 1 (TRUE)인지 확인해야합니다. 그 경우라면 SELECT 0 else SELECT sid.

SELECT sid FROM (
    SELECT IF(ISNULL(sid), 0, sid) FROM myTable WHERE keyword='tank') AS InnerTmp 
    LIMIT 1