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

eventsevent_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将所有数组值与和条件匹配到同一列的主要内容,如果未能解决你的问题,请参考以下文章

将所有列值与 Excel 中的单个单元格进行比较

将数组的值与字符串 PHP 匹配

如何将列的当前值与sql server和Oracle中同一列的先前值进行比较

如何在 Postgres 中对数组列使用 BETWEEN 条件?

如果值与在 r 中有条件删除的值匹配,则删除行

将包含列表的记录值与 Postgres 中的列值进行比较