2016-07-28 76 views
0

我见过checking if a row merely exists问题完全充满,但我还没有看到任何(SO上或其他地方)有关数据是否所有填充PostgreSQL的 - 检查是否一行在

我希望SELECT true FROM myTable WHERE name='myRow' AND * IS NOT NULL;可以工作,但事实并非如此。

什么通配符可以代替星号,如果有的话?我必须将每个列名分别放入查询中吗?

回答

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 

相反BTW。是不正确的。 where mytable is null不会返回任何东西,因为行的定义不会为空(因为它不会存在)。要查找行,其中至少一个栏为空,你将需要使用where not (mytable is not null)

类似的问题在这里描述:https://dba.stackexchange.com/q/143959/1822

+0

谢谢!你的回答非常丰富。 –