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

TA貢獻1797條經驗 獲得超6個贊
當心我陷入的陷阱:當檢查數組中是否不存在某些值時,您不應該這樣做:
SELECT value_variable != ANY('{1,2,3}'::int[])
但是使用
SELECT value_variable != ALL('{1,2,3}'::int[])
代替。

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
添加回答
舉報