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”@>不同的操作符) |
|
|
|
|
|