Oracle:查找仅包含空值的列

Jor*_*ois 9 sql oracle

我有一个包含大量列和类型列的表.

对于特定类型,某些列似乎总是为空.

我想为每种类型创建一个视图,并仅显示每种类型的相关列.假设如果某列只有特定类型的空值,那么这些列不应该是视图的一部分,那么如何通过查询找到它?

是否有SELECT [columnName] FROM [table] WHERE [columnValues] ARE ALL [null]

我知道我完全做到了......我只是想把这个想法贯穿其中.提前致谢!

小智 10

SELECT  t.column_name
FROM    user_tab_columns t
WHERE   t.nullable = 'Y'
        AND t.table_name = 'YOUR_TABLE_NAME'
        AND t.num_distinct = 0
Run Code Online (Sandbox Code Playgroud)

  • 我必须先运行统计数据`DBMS_STATS.gather_database_stats();` 然后这就像一个魅力!谢谢 ;) (3认同)

BQ.*_*BQ. -1

像这样的东西吗?

SELECT column1, column2, column3 -- and so on
FROM tableA
WHERE columnX IS NULL
AND columnY IS NULL
AND columnZ IS NULL;
Run Code Online (Sandbox Code Playgroud)

CREATE VIEW...显然,如果您愿意,也可以在声明中使用它。

  • @BQ:这与神秘的“ALL”关键字无关。这是关于OP想要得到什么。我认为如果你重新阅读他正在寻找的内容,从上下文中可以清楚地看出他所追求的基本上是:“给我特定类型的该列的每一行都为空的列的列名。” ...所以你的 sql 返回行而不是列名,并且它给出的行并不能真正让我们更接近地知道该列的每一行是否为 NULL。它只是返回(给定列集中的每一列)为 NULL 的行 (3认同)
  • 除了不选择列这一事实之外,它甚至无法告诉“[columnValues] 何时为 ALL [null]”。这将选择一堆行,其中某些列(对于该行)为空 - 这对于确定哪些列全部为空没有有用的信息 (2认同)