Postgres将所有数组值与条件

时间:2016-12-21 10:48:45

标签: ruby-on-rails postgresql postgresql-9.4

我的table table_a包含以下列

id  event_id
1   101
1   102
1   103
2   105
2   103
2   106

我想搜索(101,103)with和条件类似于带有OR条件的IN查询

假设id是另一个具有这种关系的表event_categories的外来者。

id      parent_id
101     null
102     101
103     101
104     null
105     104

所以我想从table_a中获取基于AND的记录和父事件类别,或者在该父项的子事件类别中获取记录。

附上截图以获得更多说明

enter image description here

例如“Art Galleries& Exhibits”,“Festivals”,“Food& Wine”with AND condition,

“艺术画廊和展览”的所有子类别,如果选中,则为OR条件“Art& Craft Workshops”或“Art& Craft Fairs”或“Visual Arts”。

事件

  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

关系表事件 event_categories event_id是事件

的外键
 event_id | event_category_id 
----------+-------------------
    24590 |                 1
    24590 |                13
    24445 |                 1
    24445 |                13
    24591 |               1

1 个答案:

答案 0 :(得分:0)

第一个问题:

SELECT id
FROM table_a
WHERE id IN (101, 103)
GROUP BY id
HAVING COUNT(DISTINCT id) = 2