如何获取不在内部联接中的人员列表?

时间:2018-11-22 21:32:50

标签: sql sql-server

我正在尝试获取确切的列表 不属于内部名单的人我不确定是否应该使用它的另一个联接,NOT EXISTS或NOT IN函数:

 SELECT *
 FROM db.user
 WHERE NOT EXISTS (SELECT DISTINCT email, m.id, u.status
                  FROM db.member m
                  INNER JOIN db.user u
                  ON m.id=u.member_id
                  )

不幸的是,当我运行此查询时,输出为空白。虽然应该出现大约一百万行。

2 个答案:

答案 0 :(得分:1)

您可以尝试下面的查询,该查询包含左外部联接

select distinct u.*
from db.user u
left outer join db.member m on m.id = u.member_id
where m.id is null

或者,如果您坚持使用内部联接,请尝试:

;with cte as (
SELECT DISTINCT m.id,
FROM db.member m
INNER JOIN db.user u
ON m.id=u.member_id
)
select *
from db.users u
where u.member_id not in (select id from cte)

答案 1 :(得分:1)

您已使用U作为别名,但未定义。另外,使用EXISTS()时不需要加入。这是EXISTS()的正确用法:

 SELECT *
 FROM db.user U
 WHERE NOT EXISTS (SELECT 1
                   FROM db.member m
                   WHERE m.id=u.member_id
                  )