选择表中未出现在另一个表的外键中的所有项

dim*_*414 5 mysql sql

例如,具有用户的应用程序,每个用户可以只有一个组.如果我们想要选择没有成员的组列表,那么正确的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)

Rob*_*Rob 6

没有成员的组(对于多对多配对):

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 有多喜欢它。