SQL JOIN:帮助在列表子查询中使用JOIN

SQL JOIN:帮助在列表子查询中使用JOIN,sql,join,Sql,Join,我有两张桌子 第一个名为emp,有两列名为id和name 第二个名为dep,包含名为id、empid和nameOfDep的列 如果我想列出所有有X dep但没有Y dep的emp 这是我使用的一个例子 Select e.id, e.name from emp e where e.id in (Select empid from deptid where deptid=X) and e.id not in (Select empid from deptid where deptid=Y); 如何

我有两张桌子

第一个名为emp,有两列名为id和name

第二个名为dep,包含名为id、empid和nameOfDep的列

如果我想列出所有有X dep但没有Y dep的emp

这是我使用的一个例子

Select e.id, e.name
from emp e
where e.id in (Select empid from deptid where deptid=X)
and e.id not in (Select empid from deptid where deptid=Y);
如何使用JOIN而不是子查询来实现它

SELECT e.id, e.name
FROM emp e
INNER JOIN dep d ON (e.deptID = d.deptID AND d.deptID NOT y)
将部门ID添加到员工记录中,然后加入该记录

编辑 我的坏消息,更新了

编辑
帮助阅读,按照Conrad的答案进行。

IN可以转换为内部联接。Not IN可以转换为LEFT JOIN/NULL测试。有时被称为反连接

SELECT e.id, 
       e.name 
FROM   emp e 
       INNER JOIN deptid D_X 
               ON e.empid = d_x.empid 
                  AND deptid = 'X' 
       LEFT JOIN deptid D_Y 
              ON e.empid = d_Y.empid 
                 AND deptid = 'Y'
WHERE  d_Y.empid IS NULL 

另外,我假设当您编写
deptid=X
时,您的意思是X是一个文字字符串而不是一个字段名

一行怎么能同时具有deptid=X和deptid=Y?您的查询中有一些输入错误:首先,您提到一个表名dep和列名dep,然后在您的查询中,deptid作为这两个表和列名,这并不能解决问题。他还有其他条件。是的,你还没有满足所有条件。谢谢:)你能帮我理解维恩图中的这个查询吗