2009-09-23 72 views
2

我在想,如果這樣的事情是可能的:SQL內聯有條件在選擇

SELECT name or alt_name FROM users Where userid=somenum 

我也試過這樣:

SELECT name IF NOT NULL ELSE alt_name ... 

如果任何人有任何瞭解我會很感激的。

+0

感謝,由於某種原因,當我嘗試提出問題時,工作時間的網絡在這裏,所以我不得不在我的iPhone上輸入它...... – 2009-09-23 15:29:18

+0

也就是說,網絡導致頁面超時...大聲笑 – 2009-09-23 15:29:48

回答

7

如果您想更換空然後

select coalesce(name,alt_name).... 

它將返回第一個非空值

0

不是最有效的答案,但對於這一點:

SELECT name FROM users WHERE userid=somenum AND name IS NOT NULL 
UNION 
SELECT altname FROM users WHERE userid=somenum AND name IS NULL 

我認爲這會產生你所追求的。

0

如果你使用的是支持他們,那麼最簡單的方式之一數據庫使用用戶定義的函數,你再有

SELECT udfPreferredName() FROM users 

其中udfPreferredName()將封裝名稱和alternative_name領域之間進行選擇所需的邏輯。

使用函數的一個優點是,您可以抽象出選擇邏輯並將其應用於多個SQL語句中的任何需要的地方。使用案例進行內聯邏輯很好,但通常會在整個系統中更難以維護。在大多數RDBMS中的函數調用的額外開銷不會顯著,除非你正在處理非常大的表

0

SELECT CASE 當userid和= somenum然後命名 ELSE alt_name END 來自用戶的

1

你的意思是什麼喜歡這個?我假設TSQL

SELECT CASE WHEN [name] IS NOT NULL THEN [name] ELSE [alt_name] END AS [UserName] 
FROM [Users] WHERE [UserId] = somenum 
2

這個怎麼樣?

SELECT IsNull(name, alt_name) FROM users Where userid=somenum 

它與Coalesce函數類似,但它只需要兩個參數並且更容易拼寫。