2010-03-20 198 views
12

我想知道是否可以在同一張表上運行mysql命令,該命令可以在第一個給定字段爲空的情況下選擇替代字段。MySQL:如果給定字段爲空,則選擇備選字段

例如:我有一個名爲「職位」,其中有「介紹」和「內容」的表。在同樣的語句中,如果「intro」爲空,但是在結果數組中沒有兩者,我希望選擇「content」作爲結果。

在此先感謝

回答

16

可以使用IF功能:

SELECT IF(LENGTH(intro)>0, intro, content) 
FROM posts 

或者你可以測試NULL如果你的意思是空的是NULL

+0

也謝謝你,也很好! – Kyobul 2010-03-20 20:54:35

+1

+1:'CASE'將是一個可行的選擇,但所有其他數據庫(Oracle,Postgres,而不是SQL Server)都不支持'LENGTH'關鍵字 - 必須使用'LEN'),這使得查詢可移植性幾乎沒有實際意義。 – 2010-03-20 21:13:05

14

合併是你在找什麼。

SELECT COALESCE(intro, content) AS column1 
FROM table 

假設介紹爲空且不是零長度字符串。

+0

謝謝,效果很棒! – Kyobul 2010-03-20 20:54:13

+1

我今天剛學到東西。很好的答案。 – Vinny 2010-03-20 21:12:03

2

有兩種潛在的方法。如何處理案件陳述。

Select case when field1 <> '' then field2 else field1 end 

或者你可以使用coalesce。

select coalesce(field1, field2) 
+0

有兩個以上。你有IF,IFNULL,CASE WHEN,CASE fiel1 WHEN,並且COALESCE離開我的頭頂。 當「empty」表示NULL時,「<>''將不起作用。 – dkretz 2010-03-20 20:53:54

+0

感謝您,第三種方法也很有用! – Kyobul 2010-03-20 20:55:21