我有3张桌子
user
id | etc |
game
id | etc
user_game
user_id | game_id
我想创建一种情况,n
用户无法创建另一个游戏,当且仅当他们已经在这些n
用户之间进行了游戏时。
所以,例如,假设我们有user_ids: 1,2
并且他们都在game_id 1
玩,他们不能在他们之间创建另一个游戏,但他们可以创建一个新的游戏{{1}加入游戏。
是否有可能查询这样的事情,如果是这样 - 我怎么能去做呢?尝试玩查询,加入,选择和在哪里太长时间:)
编辑:最终结果应该是我查询severel用户,看看他们是否可以一起玩(即没有找到那些user_id 3
用户一起玩的记录。
答案 0 :(得分:0)
假设您有一个包含建议用户列表的表。我称之为ProposedUsers。您可以执行以下操作来查找具有这些用户的任何game_id:
select game_id
from user_game ug join
ProposedUsers pu
on ug.user_id = pu.user_id
group by game_id
having count(distinct ug.user_id) = (select count(distinct user_id) from ProposedUsers)
关于现有游戏的匹配是否准确(游戏中没有其他用户),您的问题有点不清楚。以上处理子集的情况。完全匹配将是:
select game_id
from user_game ug left outer join
ProposedUsers pu
on ug.user_id = pu.user_id
group by game_id
having count(distinct ug.user_id) = (select count(distinct user_id) from ProposedUsers)