我的数据库中有一个表,我需要检查所有行是否有一个字段不为空。
如果没有行或者至少有一行字段为null =>真
如果有行且它们都是字段而不是null =>假
有没有办法在简单查询中执行此操作?或者我需要首先检查我的表是否为空,然后如果不检查我是否有一个字段值为空的行?
答案 0 :(得分:1)
这将计算字段中有多少NULL值;
SELECT
SUM(CASE WHEN FieldName IS NULL THEN 1 ELSE 0 END) NullValues
FROM TableName
如果没有NULL值,则返回0,如果有任何值,将返回NULLS的数量。
如果您确实想要将值返回为' True'或者“假”'然后这样做;
SELECT CASE
WHEN a.NullValues > 0
THEN 'True'
ELSE 'False'
END CheckField
FROM (
SELECT
SUM(CASE WHEN FieldName IS NULL
THEN 1
ELSE 0
END) NullValues
FROM TableName
) a
答案 1 :(得分:1)
使用count(*)
和count(field)
并比较两者:
select
case when count(*) > 0 and count(*) = count(field) then 1 -- not empty and no nulls
else 0 end as isgood
from mytable;
Oracle SQL没有布尔数据类型,因此我使用1表示true,0表示false。您可以用您喜欢的任何内容替换它(例如'true'而不是1和'false'而不是0)。
至于将其转换为谓词(与主查询相关),您将使用以下内容:
select ...
from main
where exists
(
select 1
from mytable
where mytable.colx = main.coly
having count(*) > 0 and count(*) = count(field)
);
答案 2 :(得分:0)
您可以通过聚合执行此操作。但是,很难理解你的要求。如果要检查字段没有NULL
值,可以执行以下操作:
select (case when count(*) > 0 then 1 else 0 end) as HasNullValues
from t
where field is null;
答案 3 :(得分:0)
替代方法我发现使用max并首先放置null:
select case when
max(field) keep (dense_rank first order by datfin desc nulls first) is null then 1
else 0 end as flag
from MYTABLE;