1

我有 3 张桌子

user
id | etc |

game
id | etc 

user_game
user_id | game_id

我想创造一种情况,n当且仅当用户之间已经有游戏时,用户才能创建另一个游戏n

例如,假设我们有user_ids: 1,2并且他们都在玩game_id 1,他们不能在他们之间创建另一个游戏,但是如果user_id 3加入游戏,他们可以创建一个新游戏。

是否有可能查询这样的事情,如果是这样 - 我该怎么办?尝试使用查询、连接、选择和 where 的时间太长了 :)

编辑:最终结果应该是我查询严重的用户,看看他们是否可以一起玩(即没有找到这些n用户一起玩的记录)。

4

1 回答 1

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)
于 2012-10-24T18:48:09.363 回答