我有table table_a,其中包含以下列
id event_id
1 101
1 102
1 103
2 105
2 103
2 106
我和搜索(101,103)和条件类似于IN查询与OR条件
例如,id 1匹配101和103 event_id;
为此,我写下面的查询,但它不起作用 .
select * from table_a where event_id = ALL(ARRAY[101,103]);
UPDATED--------------------------- 我还有另外一个问题
假设id是另一个具有这种关系的表event_categories的外来者 .
id parent_id
101 null
102 101
103 101
104 null
105 104
所以我想从table_a中获取基于AND的记录和父事件类别,或者在该父项的子事件类别中 .
例如101,104与AND 102,103在OR的OR之内
2 回答
您需要为单个ID聚合所有event_ids:
@>
是包含运算符,因此它检查所有event_ids的数组是否包含具有这两个ID的数组 .这将返回任何至少包含两个事件101和103的id(这是您在问题中要求的) .
如果您想查找那些具有 exactly 这两个event_ids(您的示例数据不包含)的ID,您可以使用:
请注意,数组中元素的顺序对
=
运算符很重要(与"contains"@>
运算符不同)使用
HAVING
子句: