如果它存在,我想選擇a2.date
,但是如果它是NULL
我想選擇a1.date
(a2
正在左連接)。這個:如果另一列爲空,則選擇一列
SELECT a2.date OR a1.date
...
只是返回一個布爾結果(正如人們所期望的那樣),但是如何獲得非空列的實際值呢? (a2.date
是優選的,但如果它是空的,則a1.date
)
如果它存在,我想選擇a2.date
,但是如果它是NULL
我想選擇a1.date
(a2
正在左連接)。這個:如果另一列爲空,則選擇一列
SELECT a2.date OR a1.date
...
只是返回一個布爾結果(正如人們所期望的那樣),但是如何獲得非空列的實際值呢? (a2.date
是優選的,但如果它是空的,則a1.date
)
的ANSI方法是使用COALESCE:
SELECT COALESCE(a2.date, a1.date) AS `date`
...
MySQL的本地語法是IFNULL:
SELECT IFNULL(a2.date, a1.date) AS `date`
...
與COALESCE,IFNULL是無法移植到其他數據庫。
另一個ANSI語法,該CASE expression,是一個選項:
SELECT CASE
WHEN a2.date IS NULL THEN a1.date
ELSE a2.date
END AS `date`
...
它需要更多的方向才能正常工作,但如果需求的變化更靈活。
'COALESCE'是等價的'CASE'語句的語法糖所以在這裏提到它有點多餘。爲了使用類比,所有的SQL約束都可以使用'SELECT COUNT(*)'(基數)查詢來表示,但是如果我在發佈的每個使用「FOREIGN KEY」的回答中指出了這一點,它可能會對所有相關人員變得謹慎。但是對此的一個倒退會有點苛刻。 – onedaywhen 2011-04-19 10:10:00
@OMGPonies:不要擔心downvoters--或者更準確地說,「仇敵會討厭。」 – 2017-08-03 19:10:51
使用CASE
statement作爲選擇。
SELECT CASE WHEN a2.date IS NULL THEN a1.date
ELSE a2.date END AS mydate
查看COALESCE函數。
獲取可變數量的參數並返回第一個非空值。它可以與連接一起使用。
SELECT COALESCE(a2.date, a1.date) ...
[Conditional NOT NULL case SQL]可能的重複(http://stackoverflow.com/questions/4821031/conditional-not-null-case-sql) – nawfal 2013-05-03 13:20:19