MySQL IF NOT NULL, 다음 표시 1, 그렇지 않으면 표시 0


104

나는 여기서 약간의 디스플레이 컴 플리케이션으로 작업하고 있습니다. 내가 간과하는 IF / ELSE 기능이 있다고 확신합니다.

쿼리중인 테이블이 2 개 있습니다 (고객, 주소). 첫 번째 레코드에는 주 레코드가 있지만 두 번째 레코드에는 LEFT JOIN 대상 레코드가있을 수도 있고 없을 수도 있습니다.

주소 테이블에 레코드가 없으면 0을 표시하고 싶습니다. 그리고 레코드가있는 경우 1 만 표시하고 싶습니다.

내가 지금까지 시도한 것 :

SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

이 첫 번째 예는 그렇게하지 않습니다. 그러나 COALESCE를 잘못 사용하고있을 수 있습니다.

null 인 경우 0을 표시하고 존재하는 경우 1을 표시하려면 어떻게해야합니까?


답변:


211

대신 다음을 COALESCE(a.addressid,0) AS addressexists사용하십시오 CASE.

CASE WHEN a.addressid IS NOT NULL 
       THEN 1
       ELSE 0
END AS addressexists

또는 더 간단합니다.

(a.addressid IS NOT NULL) AS addressexists

때문에이 작품 TRUE으로 표시됩니다 1MySQL의에서와 FALSE같은 0.


96
SELECT c.name, IF(a.addressid IS NULL,0,1) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

17

C / C ++에서 왔고 이것이 작동 할 것으로 기대한다면주의하세요.

select if(name, 1, 0) ..

C와 달리 'name'이 NULL이 아니더라도 false 조건이 트리거되고 위의 명령문은 0을 반환합니다. 따라서 NULL 또는 빈 문자열을 명시 적으로 확인해야합니다.

 select if(name is null or name = '', 0, 1)

위의 PS Eugen의 예는 맞지만 놀라움에 사로 잡힌이 뉘앙스를 명확히하고 싶었습니다.


16
SELECT 
    c.name, 
    CASE WHEN a.addressid IS NULL THEN 0 ELSE 1 END AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

2

WHERE없이 다른 방법을 시도해보세요 ..

비어있는 값과 NULL 값을 모두 선택합니다.

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

빈 문자열이면 null로 설정되고 그에 대해서도 true가됩니다.


또한 유용합니다. 테이블 이름에서 IFNULL (fieldname, "1")을 선택하십시오.
PodTech.io

1

실제로 최신 버전의 MySQL에서 IF 문을 사용할 수 있습니다.

IF(expr,if_true_expr,if_false_expr)

IE :

SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors

0

TSQL 내에서 시도해 볼 수 있습니다.

SELECT IIF(a.addressid IS NULL, 0, 1) AS addressexists

SQL Server가 작동해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.