Postgres将所有数组值与和条件匹配到同一列
Posted
技术标签:
【中文标题】Postgres将所有数组值与和条件匹配到同一列【英文标题】:Postgres Match All array values to same column with and condition 【发布时间】:2016-12-21 10:48:44 【问题描述】:我有表 table_a 和以下列
id event_id
1 101
1 102
1 103
2 105
2 103
2 106
我想用 AND 条件搜索 (101, 103) 类似于带有 OR 条件的 IN 查询
假设 id 是另一个具有这样关系的表 event_categories 的外来的。
id parent_id
101 null
102 101
103 101
104 null
105 104
所以我想根据 AND 与父事件类别,或在该父事件的子事件类别中从 table_a 中获取记录。
附上截图让大家更清楚
例如,带有 AND 条件的“艺术画廊和展览”、“节日”、“美食与美酒”,
“艺术画廊和展览”的所有子类别,如果选中,则带有 OR 条件“艺术与工艺研讨会”或“艺术与工艺博览会”或“视觉艺术”。
表事件
id
-------
24445
24446
24447
24448
24449
event_categories 表格
id | name | parent_id
-----+--------------------------+-----------
55 | Art & Craft Workshops | 25
53 | Art & Craft Fairs | 25
25 | Art Galleries & Exhibits |
14 | Carnivals | 3
56 | Celebrations | 3
64 | Chili Cook-offs | 26
47 | Circus | 13
45 | Comedy | 13
events 与 event_categories 的关系表 event_id 是 events 表的外键
event_id | event_category_id
----------+-------------------
24590 | 1
24590 | 13
24445 | 1
24445 | 13
24591 | 1
【问题讨论】:
我回答了你的第一个问题,但第二个问题并不完全清楚。您能给我们展示第二种情况的完整示例吗? 您能否提供两个表中的示例以及您希望输出的内容。 @EvanCarroll 更新了表详细信息并希望根据事件类别获取事件 【参考方案1】:第一个问题:
SELECT id
FROM table_a
WHERE id IN (101, 103)
GROUP BY id
HAVING COUNT(DISTINCT id) = 2
【讨论】:
以上是关于Postgres将所有数组值与和条件匹配到同一列的主要内容,如果未能解决你的问题,请参考以下文章
如何将列的当前值与sql server和Oracle中同一列的先前值进行比较