我有表 table_a 和以下列
id event_id
1 101
1 102
1 103
2 105
2 103
2 106
I 和 to 搜索 (101, 103) 使用 and 条件类似于使用 OR 条件进行 IN 查询
例如,id 1 与 101 和 103 event_id 均匹配;
为此,我编写了以下查询,但它不起作用。
select * from table_a where event_id = ALL(ARRAY[101,103]);
更新 - - - - - - - - - - - - - -我还有另一个问题
假设 id 是另一个具有这样关系的表 event_categories 的外来对象。
id parent_id
101 null
102 101
103 101
104 null
105 104
所以我想根据 AND 与父事件类别,或在该父事件的子事件类别内从 table_a 获取记录。
例如 101、104 与 AND
102、103 在 101 的 OR 范围内
您需要将所有 event_ids 聚合为一个 ID:
select id
from table_a
group by id
having array_agg(event_id) @> array[101,103];
The @>
是 contains 运算符,因此它检查所有 event_ids 的数组是否包含具有这两个 ID 的数组。
这将返回任何具有at least两个事件 101 和 103 (这就是您在问题中所要求的)。
如果您想查找那些具有exactly您可以使用这两个 event_id (您的示例数据不包含):
select id
from table_a
group by id
having array_agg(distinct event_id order by event_id) = array[101,103];
请注意,数组中元素的顺序对于=
运算符(与“包含”不同)@>
操作员)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)