代码之家  ›  专栏  ›  技术社区  ›  dimo414

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

  •  5
  • dimo414  · 技术社区  · 17 年前

    加分-考虑到另一种情景,即多对多配对,那么识别未使用组的SQL是什么?

    (如果你想要具体的字段名:) 一对多:

    Table 'users': | user_id | group_id |
    Table 'groups': | group_id |
    

    Table 'users': | user_id |
    Table 'groups': | group_id |
    Table 'user-group': | user_id | group_id |
    
    3 回复  |  直到 13 年前
        1
  •  4
  •   Rob    17 年前

    SELECT *
    FROM   groups g 
    WHERE NOT EXISTS 
        (
          SELECT 1 
          FROM users_groups ug 
          WHERE g.groupid = ug.groupid
        );
    

    此Sql也适用于您的“第一个”示例,因为您可以在子查询中用“users”替换“users_groups”=)

    就性能而言,我知道这个查询在Sql Server上的性能相当高,但我不确定MySql有多喜欢它。。

        2
  •  2
  •   FWH    17 年前

    对于第一个,试试这个:

    SELECT * FROM groups
    LEFT JOIN users ON (groups.group_id=users.group_id)
    WHERE users.user_id IS NULL;
    

    对于第二个,试试这个:

    SELECT * FROM groups
    LEFT JOIN user-group ON (groups.group_id=user-group.group_id)
    WHERE user-group.user_id IS NULL;
    
        3
  •  1
  •   Jake1164 Sipka    13 年前
    SELECT * 
    FROM groups
    WHERE groups.id NOT IN (
        SELECT user.group_id 
        FROM user
    )