如何仅使用内部或外部联接在SQL'92的显式连接语法中重写以下查询
SELECT e.emp_id ,
( SELECT AVG(salary)
FROM #salary d
WHERE d.emp_id = e.emp_id )
FROM #emp e
答案 0 :(得分:0)
我甚至不确定你为什么需要外部选择;员工ID出现在两个表中,您根本不需要加入:
SELECT salary.emp_id, AVG(salary.salary)
FROM salary
GROUP BY salary.emp_id
好吧,也许有些员工没有工资,你只想要一个NULL(你的DBMS是AVG()
严格吗?)
SELECT e.emp_id, AVG(d.salary)
FROM employee e
LEFT OUTER JOIN salary d ON e.emp_id = d.emp_id
GROUP BY e.emp_id
答案 1 :(得分:0)
很高兴byTokenMacGuy关于不需要#emp表。但是,假设您只想在#sale中查询同样位于#emp中的记录。在这种情况下,您需要将WHERE子句移动到连接的ON子句,并添加GROUP BY子句:
SELECT e.emp_id, AVG(d.salary)
FROM #salary d
INNER JOIN #emp e ON d.emp_id = e.emp_id
GROUP BY e.emp_id