代码之家  ›  专栏  ›  技术社区  ›  Jango

如何返回第2列第3列共享/重叠第2列?

  •  0
  • Jango  · 技术社区  · 7 年前

    我的目标是让一个Rails活动记录查询或SQL查询接受两个变量 USER_ID 并返回 ORG_ID 那里的那些 用户标识 S共享/重叠A 高尔基体 . 我指的是独特的,而不是回归 [8,8] 在下面,它只会返回 8 .

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

    我想知道如何查询 TABLE 具有 51 52 作为变量 用户标识 那归来 高尔基体 . 在上面的例子中,我想返回8。

    +------------------------+
    |  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 作为变量 用户标识 哪个匹配/重叠 高尔基体 S 2 3 返回Ruby方法中的[2,3]。

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

    2 回复  |  直到 7 年前
        1
  •  0
  •   iGian    7 年前

    如果我得到了你应该在用户ID为9或10的列中提取的点,那么操作数组。或者这是一个直接的问题。无论如何,这是一种可能性。

    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]
    
        2
  •  0
  •   scmlex    7 年前

    在表中的不同组织ID上使用self-join应该可以减少这种情况,如下所示:

    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