2016-12-07 21 views
4

我只需要選擇一列,只要它存在於表中,否則它可以設置爲空。SQL - 有條件地選擇列(如果存在的話)

下面

樣品臺,可以說該marks山坳是沒有必要存在,所以需要的,如果它存在

表1進行檢查:

name marks 
joe 10 
john 11 
mary 13 

查詢:

select 
    name, 
    marks if it exists else null as marks1 -- pseudo code 
from 
    table1 

應該選擇哪一行marks

+0

你會如何*不知道'marks'是table1上的一列嗎? –

+0

您應該**重新考慮您管理數據庫架構和遷移的方式。不知道列是否存在的事實可能表明您正在使用錯誤的過程在數據庫中創建和更新表。另外:擁有'marks1'表也可能是非標準化設計的標誌。你可以使用動態SQL來實現類似的功能,但它可以更好地解決你管理表的方式 –

+1

@a_horse_with_no_name同意更廣泛的觀點 - 但這不是模式和移植的問題 - 現實世界的數據很混亂:)並且上下文不是應用程序,而是來自我無法控制的來源的一些真實世界數據 - 它可能或可能不是所有期望的列 - 問題真的在此上下文中,如果可能的話爲此進行一些檢查。 – user3206440

回答

0

試試這個:

IF EXISTS(SELECT 1 
      FROM information_schema.columns 
      WHERE table_name='your_table' and column_name='your_column') THEN 
    SELECT your_column as 'some_column' 
ELSE 
    SELECT NULL as 'some_column' 
END IF 
+0

如果EXISTS()不是sql ... –

+0

@EvanCarroll PostgreSQL不支持'EXISTS()'? –

+0

是的,在'plpgsql'中。這是一種過程式語言,它是PostgreSQL支持的語言之一。但是,這不是SQL。你不能只運行一個在程序語言中有效的代碼片段。 –

0

試試這個

IF COL_LENGTH('your_table_name','column_name_you_want_to_select') IS NULL BEGIN 
--This means columns does not exist or permission is denied 
END 
else 
--Do whatever you want 
5

SQL就不允許。結果集有兩種選擇:

  1. 靜態列入
  2. 所有的表或子查詢通過柱擴張與*tbl.*

或許這將滿足您的需求,SELECT * FROM table1;您總能獲得該列,如果存在。