我有这个非常简单的MySQL查询:
SELECT m.REF_DATA_ID, COALESCE(m.SQL_FUNCTION, m.PHP_FUNCTION ) AS FUNCTION FROM AAB_REFERENCE_DATA_MANAGER m;
返回以下数据:
REF_DATA_ID | FUNCTION
88295 |
88296 |
88297 |
88298 | now()
88299 |
88300 | now()
88301 |
当我运行以下查询时,由于某些原因,COALESCE()似乎在我的查询中无法正常运行:
SELECT m.REF_DATA_ID, m.SQL_FUNCTION, m.PHP_FUNCTION FROM AAB_REFERENCE_DATA_MANAGER m;
返回:
REF_DATA_ID SQL_FUNCTION PHP_FUNCTION
88295 | |
88296 | |
88297 | |
88298 | now() |
88299 | | get_session_user_id
88300 | now() |
88301 | | get_session_user_id
我只是不确定我在COALESCE做错了什么......
我正在寻找的输出是:
REF_DATA_ID FUNCTION
88295 |
88296 |
88297 |
88298 | now()
88299 | get_session_user_id
88300 | now()
88301 | get_session_user_id
答案 0 :(得分:1)
空白字符串不是NULL
(Oracle除外)。因此,更明确的比较:
SELECT m.REF_DATA_ID,
(CASE WHEN m.SQL_FUNCTION IS NULL OR
TRIM(m.SQL_FUNCTION) = ''
THEN m.PHP_FUNCTION
ELSE m.SQL_FUNCTION
END) AS FUNCTION
FROM AAB_REFERENCE_DATA_MANAGER m;
答案 1 :(得分:0)
SELECT m.REF_DATA_ID,
COALESCE(If(Length(m.SQL_FUNCTION)=0, NULL, m.SQL_FUNCTION),
If(Length(m.PHP_FUNCTION)=0, NULL, m.PHP_FUNCTION)) AS FUNCTION
FROM AAB_REFERENCE_DATA_MANAGER m;