mysql - 获取用户未加入的群组列表,用户未创建的群组列表
问题描述
用户 (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
如何获取用户未加入的群组列表?
解决方案
如果你LEFT
加入group_tbl
tousers_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 |
推荐阅读
- javascript - 多次调用渲染器不起作用
- excel - Excel 公式 - 测试日期和乘法索引
- c++ - 如何对等待 malloc 完成所花费的时间进行基准测试?
- c# - Unity3D:在平移和旋转后将子对象置于其原始位置
- typescript - dynogels 总是告诉我 Invalid schema content 即使使用它的 github repo 中的示例
- java - 如何将输入(84 23 75 24)输入到数组中?
- deployment - 如何在 Leiningen 部署到 Clojars 时包含非 Clojure 源文件?
- google-contacts-api - Google People API:无法搜索联系人?
- hyperledger-fabric - Hyperledger Fabric:我怎样才能让一个组织既是对等节点又是排序节点?
- node.js - 如何解决这个问题?: if (!options.algorithms) throw new Error('algorithms should be set'); 错误:应该设置算法