sql - 查找包含确切三个孩子的记录
问题描述
所以我们有games
一张桌子,里面有很多participants
. 每个参与者都有一个user_id
专栏。现在我们需要为一组特定的参与者找到一个游戏。
我的意思是拥有一组 id (1,2,3)
,我们需要找到一个游戏,其中参与者就是这三个用户,不多也不少。我正在使用活动记录,我尝试了类似的东西:
Game.joins(:participants).where("user_id in (?)", [1,2,3])
但它会返回至少有一个给定用户的所有游戏。
解决方案
在 SQL 中,您可以使用group by
and having
:
select g.games_id
from games g
group by g.games_id
having count(*) = sum(case when user_id in (1, 2, 3) then 1 else 0 end) and
count(*) = 3; -- number of users in list
第一个条件检查是否所有仅指定的用户都在参与者中。第二个检查是否包括所有用户。
推荐阅读
- tcl - llength 没有返回正确的列表大小
- scrapy - Scrapy:如何使用 start_requests 为每个请求添加参数?
- python - Outlook 电子邮件 - SMTPLIB - 无法发送电子邮件
- python - 如何修复 python 类型错误“numpy.ndarray”对象不可调用
- php - PHP | 如果语句总是错误的
- c++ - 有条件地除 N 的代码中的问题
- postgresql - Postgres - 触发日志记录,但也记录行的单个值
- azure-devops - 将 Azure devops 发布管道(经典编辑器)输出变量传递给同一阶段的多个作业或外部的多个阶段
- angular - Angular 应用程序部署到 IIS - 不显示图像(静态 URL)
- oauth-2.0 - 无法在 OAuth 2.0 Jira Service Desk 集成中获取刷新令牌