亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查Postgres數組中是否存在值

檢查Postgres數組中是否存在值

我需要一種方法來測試給定數組中是否存在值。到目前為止,我想到了這樣的東西select '{1,2,3}'::int[] @> (ARRAY[]::int[] || value_variable::int)但我一直認為應該有一個更簡單的方法,我只是看不到它。編輯:剛意識到我可以做到這一點select '{1,2,3}'::int[] @> ARRAY[value_variable::int]這要好得多,我相信就足夠了,但是如果您有其他方法可以做到,請分享。
查看完整描述

3 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

使用ANY構造更簡單:


SELECT value_variable = ANY ('{1,2,3}'::int[])

的右操作數ANY(括號之間)可以是一個組(子查詢的結果,例如) 或一個陣列。有幾種使用方法:


SQLAlchemy:如何篩選PgArray列類型?

重要區別:數組運算符(<@,@>等)將數組類型期望為操作數,并在PostgreSQL的標準發行版中支持GIN或GiST索引,而該ANY構造將元素類型期望為左操作數,并且不支持這些索引。例:


用于在JSON數組中查找元素的索引

這些都不適合NULL元素。測試NULL:


檢查Postgres數組中是否存在NULL


查看完整回答
反對 回復 2019-11-26
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

當心我陷入的陷阱:當檢查數組中是否不存在某些值時,您不應該這樣做:


SELECT value_variable != ANY('{1,2,3}'::int[])

但是使用


SELECT value_variable != ALL('{1,2,3}'::int[])

代替。


查看完整回答
反對 回復 2019-11-26
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

但是,如果您還有其他方法可以分享,請與我們分享。


您可以比較兩個數組。如果左側數組中的任何值與右側數組中的值重疊,則它將返回true。這有點駭人聽聞,但確實有效。


SELECT '{1}'   && '{1,2,3}'::int[];  -- true

SELECT '{1,4}' && '{1,2,3}'::int[];  -- true

SELECT '{4}'   && '{1,2,3}'::int[];  -- false

在第一個和第二個查詢中,值1在正確的數組中

請注意,第二個查詢是true,即使該值4未包含在正確的數組中

對于第三個查詢,左數組(即4)中沒有值在右數組中,因此它返回false


查看完整回答
反對 回復 2019-11-26
  • 3 回答
  • 0 關注
  • 3191 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號