如何設置 「IN
」 statment,這樣的默認值:用「IN」語句設置默認值?
SELECT username
FROM user
WHERE id IN (1,2,3,4)
ORDER BY FIELD(id,1,2,3,4)
如果id = 2
不可用,則返回0
或null
,像這樣:
John33
0
amanda1
erik
如何設置 「IN
」 statment,這樣的默認值:用「IN」語句設置默認值?
SELECT username
FROM user
WHERE id IN (1,2,3,4)
ORDER BY FIELD(id,1,2,3,4)
如果id = 2
不可用,則返回0
或null
,像這樣:
John33
0
amanda1
erik
你需要做到這一點a left join
:
SELECT u.username
FROM (select 1 as id union all select 2 union all select 3 union all select 4
) ids left join
user u
on u.id = ids.id
ORDER BY FIELD(id, 1, 2, 3, 4);
邏輯在where
子句不能將新行添加到結果集中。
一個IN (list)
比較返回一個布爾值,(TRUE,FALSE或NULL)爲其評估的每一行。
因此,foo IN (list)
不能(自己)「產生」在行源中不可用的行。
(你說id = 2
「不可用」,我們認爲這意味着沒有排在滿足這個謂詞user
。)
您能產生結果集如圖所示,但是它沒有根本不需要比較IN
。
您需要一個確保返回所需「id」值的行源;內聯視圖是一種方便的方法。
SELECT u.username
FROM (SELECT 1 AS id
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
) n
LEFT
JOIN user u
ON u.id = n.id
ORDER BY n.id
LEFT JOIN指定外部聯接操作。也就是說,如果右側表格(user
)中的匹配行與左側表格(n
)中的行匹配,則查詢將返回n
的行以及所有的NULL
值從user
列。
您可以使用SELECT列表中的表達式替換該用戶名的NULL值。檢查u.id
是否爲NULL(這意味着沒有找到匹配的行),並返回其他內容。例如,文字0
。
SELECT IF(u.id IS NULL,'0',u.username) AS username
如果您要更換的username
所有NULL值這是MySQL的特定語法的ANSI標準相當於
SELECT CASE WHEN u.id IS NULL THEN '0' ELSE u.username END AS username
,生產的不只是NULL值當user
行缺少:
SELECT IFNULL(u.username,'0') AS username
作爲用戶名FROM(選擇)(用戶名爲NULL,則爲0時結束)FROM – Mihai 2014-09-27 17:31:13
@Mihai - 或使用['IFNULL'](http://dev.mysql.com/doc/refman/5.0/en/control-flow -F unctions.html#function_ifnull);) – slugonamission 2014-09-27 17:32:26
或coalesce .... – Mihai 2014-09-27 17:32:42