SQL JOIN:帮助使用join inisted子查询

时间:2014-06-13 17:26:47

标签: sql join

我有两张桌子,

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

第二个名为dep,并且具有名为id和empid以及nameOfDep

的列

如果我想要列出所有具有X dep的emp,但是没有Y dep

这是我使用的一个例子

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而不是子查询来创建它?

2 个答案:

答案 0 :(得分:1)

IN可以转换为INNER JOIN。 A IN可以转换为LEFT JOIN / NULL测试。有时称为ANTI JOIN。

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是一个文字字符串而不是一个字段名

答案 1 :(得分:-2)

SELECT e.id, e.name
FROM emp e
INNER JOIN dep d ON (e.deptID = d.deptID AND d.deptID NOT y)

将部门ID添加到员工记录中,然后加入。

修改 我的不好,更新了。

修改 有帮助阅读,请听康拉德的回答。