我有一個相當大的子查詢,我想丟棄子查詢的所有值(不是 id)為空的行
原表:

所需的輸出:

詢問:
SELECT
id, num1, num2
FROM table
WHERE COALESCE(num1, num2) IS NOT NULL
上面的查詢完成了這項作業,但我想知道是否有更聰明/更優雅的方式來撰寫這個,它與上面的查詢相同。由于有問題的實際表有很多列,我希望將來避免在 where 子句中編輯一長串列名。
uj5u.com熱心網友回復:
另一種選擇是檢查這兩列的記錄是否不為空:
select *
from the_table
where not (num1, num2) is null;
(num1, num2) is null如果(匿名)記錄的所有欄位都為空,則為真。
請注意,否定條件很重要,它不可能使用is not null-不起作用。(num1, num2) is not null
我認為使用哪一個是個人品味的問題。
另一種更動態的方法是將行轉換為 JSON 值,洗掉不相關的列,然后洗掉所有空值并將其與空物件進行比較:
select *
from the_table t
where jsonb_strip_nulls(to_jsonb(t) - 'id' - 'num3') <> '{}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/511361.html
上一篇:帶有陣列通配符的postgresjsonb查詢,例如jsonpath:"$.data.text1[?(@.lang=="de")]"
