PostgreSQL - 检查

时间:2016-07-28 08:52:13

标签: postgresql

我已经看到了checking if a row merely exists的问题,但我还没有看到任何关于所有数据是否填写的内容(在SO或其他地方)。

我希望SELECT true FROM myTable WHERE name='myRow' AND * IS NOT NULL;可行,但它没有。

如果有星号的话,用什么通配符代替星号?我是否必须单独将每个列名称放入查询中?

1 个答案:

答案 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