2014-02-12 50 views
0

我有一個260列的表,我只想看到只有空值的列。 我知道有幾個更長的版本可以查看這些信息,但有沒有更快的方法? 感謝大師SQL只能從表中選擇空值

+2

你的意思是,所有字段爲空?或ANY列爲空?什麼是您想要改進的「更長」版本? –

+0

如果結果集沒有空值,您希望查詢的結果集將刪除列嗎?抱歉。你不能從這裏到達那裏。您可以查詢系統表(元數據)並使用它來針對其結果集只包含可空列的表構建查詢,但不能寫'select * -nonnullable from foo'。它不這樣工作。 –

+0

尋找一個PIVOT查詢 – koriander

回答

4
SELECT t.column_name 
FROM user_tab_columns t 
WHERE t.nullable = 'Y' AND t.table_name = 'mytable' AND t.num_distinct = 0 

此外,運行它更新的統計數據之前:

BEGIN 
DBMS_STATS.gather_database_stats(); 
END 
+0

SELECT t.column_name FROM IP_HEADER噸 WHERE t.nullable = 'Y' 和t.IP_HEADER = 'MYTABLE' AND t.num_distinct = 0 錯誤的Oracle SQL顯影劑: ORA-00904: 「T」 「NUM_DISTINCT」:無效標識符 00904. 00000 - 「%s:無效標識符」 *原因: *操作: Error at Line:7列:71 – StackBartender

+0

您從哪裏得到'IP_HEADER'?是。 – Mihai

1

如果你的問題是關於顯示Nullable表列,看看@Mihai ...

你絕對可以寫動態的Pl/Sql來構建並執行只包含包含null的列的語句。您可以使用一系列循環,Ref_cursor,Execute Immediate,oracle數據字典等。

但是,如果您能夠做到,您就會知道。

通常,您可以選擇某些數據,其中某些值爲null。例如。

Select * From myTable where Col1 is null or col2 is null... -- 258 more columns 

這將返回所有260列,N行,其中至少有一列是Null