如何在col3共享/重叠的col2处返回col2?

时间:2018-07-31 22:55:00

标签: sql ruby-on-rails postgresql activerecord ruby-on-rails-5

我的目标是要有一个Rails Active Record查询或SQL查询,它接受两个变量USER_ID,并返回所有ORG_ID共享的USER_ID中的所有变量,作为唯一的变量/与ORG_ID重叠。作为唯一,我的意思是与其返回下面的[8,8],不如返回8

+-------------------------+
| ID   | ORG_ID | USER_ID |
+-------------------------+
|  "51" |   "8"  |  "51"  |
|  "52" |   "8"  |  "52"  |
+-------------------------+

我想弄清楚如何使用TABLE51作为52的变量来查询我的USER_ID,这些变量从{{1}返回8 }。在上面的示例中,我想返回8。

ORG_ID

在上面的下一个示例中,我想使用+------------------------+ | ID | ORG_ID | USER_ID | +------------------------+ | "1" | "5" | "1" | | "2" | "2" | "2" | | "3" | "3" | "3" | | "4" | "2" | "4" | | "5" | "3" | "9" | | "6" | "1" | "10" | | "7" | "2" | "9" | | "8" | "2" | "10" | | "9" | "3" | "9" | | "10"| "3" | "10" | +------------------------+ 9作为10的变量,它们将与USER_ID的{​​{1}}匹配/重叠和ORG_ID在Ruby方法中返回[2,3]。

我想学习如何使用Rails或SQL进行活动记录查询。我目前对我的数据库使用PostGreSQL 10,上面的所有值都是bigints。我正在使用Rails 5.2。

2 个答案:

答案 0 :(得分:0)

在表中不同的ORG_ID上使用自我联接应对此进行缩减,如下所示:

select distinct org9.org_id
from (select distinct org_id from org where user_id = 9) as org9
inner join (select distinct org_id from org where user_id = 10) as org10
    on org9.org_id = org10.org_id

答案 1 :(得分:0)

如果我明白了,您应该选择user_id为9或10的列,然后操纵该数组。也许thare是直接查询。无论如何,这是一种可能性。

Model.where(....).pluck(:id, :org_id, :user_id)

让我们说这是采摘结果:

pluck_query_result.map!{ |e| e[1..2] }.group_by{ |e| e[0] }.reject{ |_, v| v.size < 2 }.keys

您可以这样做:

pluck_query_result.map! { |e| e[1..2] }.group_by {|e| e[0]}.reject{ |_, v| v.size < 2}.keys
# => [3, 2]