2016-07-28 70 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

謝謝!你的回答非常豐富。 –