一方的多对多限制

时间:2012-10-24 15:58:05

标签: mysql

我有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用户一起玩的记录。

1 个答案:

答案 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)