如果MySQL中返回的结果为NULL,请选择默认值

use*_*559 4 mysql sql coalesce

以下查询运行正常,但我想输入一个选项,如果返回的电子邮件是NULL,那么我输入"example@google.com"或类似的东西.我已经阅读了一些函数,比如说COALESCE(EMAIL,"example@google.com"),但我不确定该函数在脚本中的位置.你能指点一下我应该在哪里注入这个功能吗?我是否正朝着正确的方向前进?谢谢.

SELECT LCASE(LOGIN_NAME) as uniqueid, CONCAT('sha-512:', PASSWD) as password, REPLACE(CONTACT_NAME, '"', '') as name, \
     CONCAT('unit,', \
       MAX(CASE WHEN USER_TYPE = 'custom' THEN  \
          'location_employee'  \
        WHEN (LOGIN_NAME != 'link' AND USER_TYPE = 'owner' AND (UA.PARTY_SITE_ID IS NULL OR NOT EXISTS (SELECT U2.ID FROM CUSTOMER_DATA.USER_ACCESS U2 WHERE U2.USER_ID=U.ID AND (U2.PARTY_SITE_ID IS NULL OR U2.PARTY_SITE_ID = '')) ) )THEN  \
          'master'  \
        ELSE  \
          'location'  \
        END)) AS role, \
     MAX(EMAIL) as email, \
     MAX(PHONE) as phone, \
     MAX(FAX) as fax \
     FROM ORACLE_EXPORTS.SHIP_TO ST, \
     CUSTOMER_DATA.USER U \
     JOIN CUSTOMER_DATA.USER_ACCESS UA ON U.ID = UA.USER_ID \
     WHERE ( \
     (UA.PARTY_SITE_ID IS NULL AND ST.CUSTOMER_ID = UA.CUSTOMER_ID ) \
     OR \
     (ST.PARTY_SITE_ID IS NOT NULL AND ST.PARTY_SITE_ID = UA.PARTY_SITE_ID ) \
     ) \
     AND U.LOGIN_NAME IN ( ? ) \
     GROUP BY LOGIN_NAME
Run Code Online (Sandbox Code Playgroud)

kon*_*yak 16

使用MySQL的IFNULL功能,

IFNULL(MAX(EMAIL), "example@google.com") as email
Run Code Online (Sandbox Code Playgroud)

  • 这未能解决我的问题,直到我意识到我的空白字段实际上是一个**空字符串**,它[与 MySQL 中的 NULL 不同](https://dev.mysql.com/doc/refman/8.0/en /problems-with-null.html)。对于空字符串,此方法有效:`IFNULL(NULLIF(EMAIL, ''), "NULL")`。 (2认同)
  • @BrianWood,将 `NULLIF` 嵌套在 `IFNULL` 中是有诗意的:D 对我来说,虽然它也降低了可读性(让我停下来想知道“这是什么”几秒钟)。 (2认同)

Rap*_*aus 9

那么,你试图收到电子邮件的地方?

COALESCE(MAX(EMAIL), 'example@google.com') as email
Run Code Online (Sandbox Code Playgroud)


Mar*_*c B 3

SELECT coalesce(field_or_derived_value_that_could_be_null, "new value here"), ...
FROM ...
WHERE ...
Run Code Online (Sandbox Code Playgroud)