我的目标是要有一个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" |
+-------------------------+
我想弄清楚如何使用TABLE
和51
作为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。
答案 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]