3 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
使用ANY構(gòu)造更簡(jiǎn)單:
SELECT value_variable = ANY ('{1,2,3}'::int[])
的右操作數(shù)ANY(括號(hào)之間)可以是一個(gè)組(子查詢(xún)的結(jié)果,例如) 或一個(gè)陣列。有幾種使用方法:
SQLAlchemy:如何篩選PgArray列類(lèi)型?
重要區(qū)別:數(shù)組運(yùn)算符(<@,@>等)將數(shù)組類(lèi)型期望為操作數(shù),并在PostgreSQL的標(biāo)準(zhǔn)發(fā)行版中支持GIN或GiST索引,而該ANY構(gòu)造將元素類(lèi)型期望為左操作數(shù),并且不支持這些索引。例:
用于在JSON數(shù)組中查找元素的索引
這些都不適合NULL元素。測(cè)試NULL:
檢查Postgres數(shù)組中是否存在NULL

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

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
但是,如果您還有其他方法可以分享,請(qǐng)與我們分享。
您可以比較兩個(gè)數(shù)組。如果左側(cè)數(shù)組中的任何值與右側(cè)數(shù)組中的值重疊,則它將返回true。這有點(diǎn)駭人聽(tīng)聞,但確實(shí)有效。
SELECT '{1}' && '{1,2,3}'::int[]; -- true
SELECT '{1,4}' && '{1,2,3}'::int[]; -- true
SELECT '{4}' && '{1,2,3}'::int[]; -- false
在第一個(gè)和第二個(gè)查詢(xún)中,值1在正確的數(shù)組中
請(qǐng)注意,第二個(gè)查詢(xún)是true,即使該值4未包含在正確的數(shù)組中
對(duì)于第三個(gè)查詢(xún),左數(shù)組(即4)中沒(méi)有值在右數(shù)組中,因此它返回false
添加回答
舉報(bào)