2016-06-10 104 views
1

如何将此左连接查询作为子查询来替代?将左连接写为子查询

SELECT d.department, COUNT(e.employeeid) 
FROM department d 
LEFT JOIN employee e 
    ON d.id = e.employeeid 
GROUP BY d.department 
ORDER BY d.department; 

这是我试过的,但不起作用。

SELECT d.department 
FROM department AS d 
HAVING COUNT(e.employeeid) > 1 
(
SELECT COUNT(e.employeeid) 
FROM employee AS e 
WHERE d.id = e.employeeid 
); 
+0

你试图完成什么结果?子查询通常比等效连接效率低。如果您只想要拥有多名员工的部门,则可以在第一个查询中使用第二个查询中的HAVING。 – Uueerdo

回答

0

将相关的子查询放入选择列表中。

SELECT d.department, 
     (select COUNT(e.employeeid) from employee e where d.id = e.employeeid) 
FROM department d 
ORDER BY d.department 

也许你需要做SELECT DISTINCT以避免重复的行。

编辑:那加入条件似乎有点奇怪。它不应该是d.id = e.departmentid或类似的?

+0

谢谢,你的文章帮了我很多。我终于搞定了。我想联合声明有点奇怪吗?我不确定我自己,但它的工作原理。 – Brian