programing

MySQL이 NULL이 아니면 1을 표시하고, 그렇지 않으면 0을 표시합니다.

projobs 2023. 1. 14. 10:21
반응형

MySQL이 NULL이 아니면 1을 표시하고, 그렇지 않으면 0을 표시합니다.

디스플레이가 좀 복잡해서 작업하고 있어요제가 간과하고 있는 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를 잘못 사용하고 있는 것 같습니다.

0(늘인 경우)과 1(있는 경우)을 표시하려면 어떻게 해야 합니까?

대신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.

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

C/C++에서 온 경우 이 기능이 작동하기를 기대하는 경우 주의하십시오.

select if(name, 1, 0) ..

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

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

위의 PS Eugen의 예는 맞지만, 나는 이 뉘앙스가 나를 놀라게 했기 때문에 명확하게 하고 싶었다.

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

WHERE를 사용하지 않는 다른 방법, 이것을 사용해 보세요.

빈 값과 NULL 값을 모두 선택합니다.

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

빈 문자열일 경우 null로 설정되며, 이 경우에도 true가 됩니다.

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

IF(expr,if_true_expr,if_false_expr)

IE:

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

TSQL 의 경우는, 다음의 조작을 실행할 수 있습니다.

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

SQL Server는 동작합니다.

언급URL : https://stackoverflow.com/questions/9387839/mysql-if-not-null-then-display-1-else-display-0

반응형