如何将此sql查询的语法更改为92的显式连接语法

时间:2011-09-29 02:38:14

标签: sql

如何仅使用内部或外部联接在SQL'92的显式连接语法中重写以下查询

SELECT  e.emp_id ,
( SELECT    AVG(salary)
  FROM      #salary d
  WHERE     d.emp_id = e.emp_id )
FROM    #emp e

2 个答案:

答案 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