我有一个名为Temp的表,该表约有15列。 在该表中,col1是主键,其余所有都是普通键(可能具有空值) 我已经将数据和日期(在col15中)一起插入了表中。 如果该数据不适用于除主键列之外的所有列,则 我插入了主键列值和日期列值(列15) 并为所有剩余列提供空值。
Temp
------------------------------------------------------
col1 col2 col3 col4 col5 ....................col15
------------------------------------------------------
o124 xxx xxx xxx null 2019-10-17
o236 null xxx xxx xxxx 2019-10-17
o437 xxx xxx null xxxx 2019-10-17
o448 xxx null xxx xxxx 2019-10-17
o456 null null null null 2019-10-17
o458 null null null null 2019-10-17
现在,我想获取除主键列(column1)和日期列(column 15)之外的所有列中都没有值的行。
输出应为
------------------------------------------------------
col1 col2 col3 col4 col5 ....................col15
------------------------------------------------------
o456 null null null null 2019-10-17
o458 null null null null 2019-10-17
我应该写什么查询?
谢谢
答案 0 :(得分:3)
“查找除1和15以外的所有列均为空的地方”:
SELECT *
FROM temp
WHERE
--col1 is PK and won't be null so we don't need to check it
col2 IS NULL AND
col3 IS NULL AND
...
col14 IS NULL AND
col15 IS NOT NULL --check it if it's a hard requirement that it must still have a value
请注意,尽管来自Tejash的查询将起作用,但作为一般规则,请尝试避免使用对表值进行操作的函数,但应在where子句中使用它,因为这意味着oracle必须评估每一行的函数结果(是数百万个评估),并且通常会禁止使用索引(除非指定了功能索引,这种情况很少见)。在这种情况下,除非您创建带有标志以指示所有字段是否为空的另一列,否则这个查询甚至不可能被合理地索引,但是对于真正更一般的情况,请谨慎使用;例如,请勿将一百万个日期转换为字符串以使其与单个字符串参数竞争,将单个字符串参数转换为日期并将其与表中的日期进行比较(非转换行数据)
答案 1 :(得分:2)
您可以简单地使用coalesce
函数:
Select * from your_table
Where coalesce(col2, col3, col4, ... , col14) is null;
干杯!
答案 2 :(得分:-1)
像select * from Temp where (col2 != null or col3 != null or ... or col14 != null)
这样的东西应该没问题。