Sql 需要包含一些不在列表中的结果

Sql 需要包含一些不在列表中的结果,sql,mysqli,Sql,Mysqli,我这里有一个SQL小提琴需要一些帮助 我需要返回任何组id,其中用户id在该组id中没有“组”设置。我在SQL FIDLE中的查询删除了13565,因为它在不同的组id中有“GROUP” 这一定很简单,但我就是搞不懂 CREATE table role( role_id int, role_type varchar(255), group_id int, user_id int ); INSERT INTO role VALUES(71002,'Group',1465,8301

我这里有一个SQL小提琴需要一些帮助

我需要返回任何组id,其中用户id在该组id中没有“组”设置。我在SQL FIDLE中的查询删除了13565,因为它在不同的组id中有“GROUP”

这一定很简单,但我就是搞不懂

CREATE table role(
  role_id int,
  role_type varchar(255),
  group_id int,
  user_id int
);

INSERT INTO role VALUES(71002,'Group',1465,8301);
INSERT INTO role VALUES(71000,'Training_admin',1465,7959);
INSERT INTO role VALUES(71003,'Training_admin',1465,8301);
INSERT INTO role VALUES(71001,'Training_User',1465,7959);
INSERT INTO role VALUES(71004,'Training_User',1465,8301);
INSERT INTO role VALUES(71005,'Training_User',1465,13541);
INSERT INTO role VALUES(493513,'Initial',6314,13565);
INSERT INTO role VALUES(493522,'Ongoing',6314,13565);
INSERT INTO role VALUES(493534,'Initial',3128,13565);
INSERT INTO role VALUES(493556,'Group',3128,13565);

select * from role 
where user_id not in (select role.user_id 
    from role
    where role.role_type = 'GROUP')

使用
不存在
而不是
不在
中,这允许使用多个谓词:

SELECT  *
FROM    Role AS r
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    role AS r2
            WHERE   r2.user_id = r.user_id
            AND     r2.group_id = r.group_id
            AND     r2.role_type = 'GROUP'
        );
话虽如此,您可能应该改写为:

SELECT  r.*
FROM    Role AS r
        LEFT JOIN role AS r2
            ON r2.user_id = r.user_id
            AND r2.group_id = r.group_id
            AND r2.role_type = 'GROUP'
WHERE   r2.role_id IS NULL;

以下是您正在查找的不带子查询的查询(以获得更好的性能):


希望这能对您有所帮助。

您应该将代码包含在您的question@GordonLinoff-给你…:)你不是已经问过这个问题了吗???@JoëlSalamin-是的,我问了一个问题,但结果不是正确的。谢谢你!!“选择1”对我来说是新的,我想这就是为什么我总是尝试使用NOT IN,@DrDan即使
SELECT 1
对您来说是新的,也可以使用第二个解决方案,而不使用子查询。最好尽量避免在SQL查询中使用子查询
SELECT *
FROM role R
LEFT OUTER JOIN role R2 ON R2.user_id = R.user_id
                          AND R2.role_type = 'GROUP'
WHERE R2.user_id IS NULL