我有两张桌子,
第一个名为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而不是子查询来创建它?
答案 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添加到员工记录中,然后加入。
修改强> 我的不好,更新了。
修改强> 有帮助阅读,请听康拉德的回答。