簡體   English   中英

在 postgres 數組中查找值(有些必須在,有些不能在同一個查詢中)

[英]Finding values in postgres array (some must be in, some must not be in at the same query)

我有一個ids integer[]

而且,我想找到包含1但不能包含2, 3, 4

但是[1] OR [1, 5] OR [1, 6, 7] <- 這個數據沒問題。 [2,3,4]不是。

所以我嘗試了這種方式

SELECT * 
FROM table_test 
WHERE 1 = ANY(ids) AND 2 <> ANY(ids)  AND 3 <> ANY(ids)  AND 4 <> ANY(ids)

但它返回1 = ANY(ids)部分

[1 2 3]
[1 3 4]
[1]
[1 5]
[1 6 7]

我想要這個數據

[1]
[1 5]
[1 6 7]

我怎么解決這個問題?

非常感謝!

您應該將ALL<>一起使用。

如果至少一個元素不等於 2,則表達式2 <> ANY(ids)為真——情況總是如此,因為在第一個條件下,您需要至少一個元素為 1(不是 2)。

SELECT * 
FROM table_test 
WHERE 1 = ANY(ids) 
  AND 2 <> ALL(ids)  
  AND 3 <> ALL(ids)  
  AND 4 <> ALL(ids)

另一種選擇是使用重疊運算符&& (“有共同的元素”)並否定它:

SELECT * 
FROM table_test 
WHERE 1 = ANY(ids) 
  AND NOT ids && array[3,4,5]

您的查詢非常接近,但實際上是:

  1. 檢查是否有任何數組元素包含1 (這沒關系)
  2. 檢查是否有任何數組元素不包含234 (這意味着[1,3,4]有效,因為1不是2,3 or 4 ,因此滿足條件)

您真正需要檢查的情況 #2 是所有元素都不是2, 3, 4

您更新后的查詢現在是:

SELECT * FROM table_test WHERE 1 = ANY(ids) AND 2 <> ALL(ids)  AND 3 <> ALL(ids)  AND 4 <> ALL(ids);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM