首页 > 解决方案 > 获取用户未加入的群组列表,用户未创建的群组列表

问题描述

用户 (Ben) 已加入第 2 组和第 3 组。如何在选择查询中编写此内容...我想从我未加入的组和未创建的组中进行选择。

users_tbl table
user_id username
| 1    | ben
| 2    | betty
| 3    | tim
| 4    | jimmy
| 5    | sammy


user_groups table
user_id         group_id
|      1     |       2
|      1     |       3


group_tbl table
group_id     user_id
|    1    |     5
|    2    |     4
|    3    |     5

我能够获取我没有使用此查询创建的组列表...

SELECT * FROM group_tbl LEFT JOIN users_tbl ON users_tbl.user_id = group_tbl.user_id WHERE group_tbl.user_id != ? ORDER BY RAND() LIMIT 10

如何获取用户未加入的群组列表?

标签: mysql

解决方案


如果你LEFT加入group_tbltousers_tbl并返回不匹配的行,你可以做到这一点group_tbl

SELECT g.* 
FROM group_tbl g LEFT JOIN user_groups u 
ON u.group_id = g.group_id AND u.user_id = 1
WHERE u.user_id IS NULL

或与NOT EXISTS

SELECT g.* 
FROM group_tbl g 
WHERE NOT EXISTS (
  SELECT 1 
  FROM user_groups u 
  WHERE u.group_id = g.group_id AND u.user_id = 1
)

请参阅演示
结果:

group_id 用户身份
1 5

推荐阅读