簡體   English   中英

復雜的左外部聯接查詢

[英]Complex left outer join query

我有一個帶有復雜查詢的Rails應用程序,但似乎無法解決。 我有2張桌子,俱樂部和選擇。 桌上俱樂部就是這樣:

id,name
1,A
2,B
3,C
4,D

桌子選項包含所有用戶從桌子俱樂部中選擇的俱樂部:

id,club_id,user_id
1,1,1
2,1,2
3,2,3
4,3,1
5,3,3

現在,我想要一個選擇框,其中包含來自桌球俱樂部的所有項目,而沒有當前用戶已經選擇的元素(他不能兩次選擇同一個俱樂部)。 因此,對於用戶1,它應該只顯示俱樂部B和D,因為他已經選擇了俱樂部A和C。

因此,我在模型中將其創建為作用域:

  scope :selectable, ->(current_user) {
    joins('LEFT OUTER JOIN selections ON selections.club_id = clubs.id').
    where('selections.id IS NULL OR selections.user_id != ?', current_user.id).
    group('clubs.id')
  }

當只有一個用戶進行選擇時,這很好用,但是如果更多的用戶選擇了與當前用戶相同的俱樂部,這些俱樂部仍然會顯示。 我可以提高顯示正確的俱樂部的水平嗎?

我找到了一種似乎可行的解決方案,但我不知道這是否是最優雅的解決方案:

  scope :selectable, ->(current_user) {
    joins('LEFT OUTER JOIN selections ON selections.club_id = clubs.id').
    where('selections.id IS NULL OR selections.user_id != ?', current_user.id).
    where('clubs.id NOT IN (?)', current_user.clubs).
    group('clubs.id')
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM