回答

收藏

Postgres将所有数组值匹配到同一列---已更新

技术问答 技术问答 245 人阅读 | 0 人回复 | 2023-09-14

我有以下表格table_a
0 M+ W: ^2 z9 R# ^" Bid  event_id 1032  1032 1032 1032  1032 106106I与搜索(101、103)和条件相似OR条件的IN查询2 I2 ~# V  B# C( C$ @
例如,id 1与101和103 event_id都匹配;$ B& D. f; H0 Y% u
为此,我写了以下查询,但它不起作用。' v! P" Q# p( I2 i. S7 K
select * from table_a where event_id = ALL(ARRAY[101,103]);更新---------------------------    我还有另一个问题6 T1 w0 ^  c& ]
假设id另一个有这种关系的表event_categories外部对象。
8 s+ G& Z1 A4 v0 A0 p- h- ]7 tid      parent_id101     null102    101103    101104null105     104因此,我认为基于父事件类别或父事件类别的子事件类别AND从table_a中获取记录。
$ Y) J; H/ Z; x. y  _3 e$ q4 K# R例如101、104和101的OR之内为AND 102、103
2 n7 ]7 e. n9 w- P& E* v6 @  u, K- [, y                                                               
/ l4 i, t; \" O2 M2 b) D    解决方案:                                                               
, m/ O* m4 N5 K; u                                                                你需要一个ID汇总所有event_id:3 T) y5 f. L" X0 d" e2 E! }, k+ E9 r
select idfrom table_agroup by idhaving array_agg(event_id) @> array[101,103];的@>操作人员包,所以它会检查是否全部。event_ids这两个包含数组ID的数组。
; P9 t3 t* x- M& }' w: h这将返回 至少    具有两个事件101和103(这是您在问题中要求的)的任何id 。& ]! I; c7 m8 Q' i9 m  S0 T
假如你想找到那些ID的 正是    这两个event_ids(不包括您的样本数据),可以使用:
4 J& c$ P  ?4 h2 v; N. x$ t" Sselect idfrom table_agroup by idhaving array_agg(distinct event_id order by event_id) = array[101,103];请注意,数组中元素的顺序=运算符很重要(与contains”@>不同的操作符)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则