내가이 쿼리가 NULL 인 경우. 나는이 시도 0으로 NULL을 대체 할,하지만 작동하지 않습니다점검 하위 쿼리는
SELECT sid FROM (SELECT IFNULL(sid,0) AS sid FROM myTable WHERE keyword='tank') AS InnerTmp LIMIT 1
내가이 쿼리가 NULL 인 경우. 나는이 시도 0으로 NULL을 대체 할,하지만 작동하지 않습니다점검 하위 쿼리는
SELECT sid FROM (SELECT IFNULL(sid,0) AS sid FROM myTable WHERE keyword='tank') AS InnerTmp LIMIT 1
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
문제는 sid
가 NULL
경우에만 테스트하는 것입니다 만약 그렇다면 당신에게 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