例如,具有用户的应用程序,每个用户可以只有一个组.如果我们想要选择没有成员的组列表,那么正确的SQL是什么?我一直觉得我只是要掌握查询,然后它又消失了.
奖励积分 - 考虑到替代的Senario,它是多对多的配对,识别未使用的组的SQL是什么?
(如果你想要具体的字段名称:)一对多:
Table 'users': | user_id | group_id |
Table 'groups': | group_id |
Run Code Online (Sandbox Code Playgroud)
许多一对多:
Table 'users': | user_id |
Table 'groups': | group_id |
Table 'user-group': | user_id | group_id |
Run Code Online (Sandbox Code Playgroud)
没有成员的组(对于多对多配对):
SELECT *
FROM groups g
WHERE NOT EXISTS
(
SELECT 1
FROM users_groups ug
WHERE g.groupid = ug.groupid
);
Run Code Online (Sandbox Code Playgroud)
该 Sql 也适用于您的“第一个”示例,因为您可以在子查询中用“users”替换“user_groups”=)
就性能而言,我知道这个查询在 Sql Server 上性能相当好,但我不太确定 MySql 有多喜欢它。
| 归档时间: |
|
| 查看次数: |
1246 次 |
| 最近记录: |