나는 여기서 약간의 디스플레이 컴 플리케이션으로 작업하고 있습니다. 내가 간과하는 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을 표시하려면 어떻게해야합니까?
답변
대신 다음을 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
으로 표시됩니다 1
MySQL의에서와 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) ..
C와 달리 ‘name’이 NULL이 아니더라도 false 조건이 트리거되고 위의 명령문은 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가 작동해야합니다.