我已经看到了checking if a row merely exists的问题,但我还没有看到任何关于所有数据是否填写的内容(在SO或其他地方)。
我希望SELECT true FROM myTable WHERE name='myRow' AND * IS NOT NULL;
可行,但它没有。
如果有星号的话,用什么通配符代替星号?我是否必须单独将每个列名称放入查询中?
答案 0 :(得分:3)
您确实可以引用整行,但不能使用*
,而是使用表名:
SELECT true
FROM myTable
WHERE name='myRow'
AND myTable IS NOT NULL;
如果行的所有列不为空,则行值上的IS NOT NULL
运算符返回true。
以下声明:
with mytable (col1, col2, col3) as (
values
(1,null,null),
(null,1,null),
(null,null,1),
(1,1,1)
)
select *
from mytable
where mytable is not null;
将返回:
col1 | col2 | col3
-----+------+-----
1 | 1 | 1
相反的顺便说一下。不是真的。 where mytable is null
不会返回任何内容,因为根据定义,行永远不会为null(因为它不会存在)。要查找至少有一列为null的行,您需要使用where not (mytable is not null)
此处描述了类似的问题:https://dba.stackexchange.com/q/143959/1822