如何在SQL Server中添加三个表

时间:2016-11-04 00:27:09

标签: sql sql-server

this is 2 tables

this is 2 tables

屏幕截图显示了参考表。

我的目标是检索日期 20150131

每州最低工资

我试过这段代码

select 
    s.Descrip, 
    MIN(Salary) AS Minimum_per_state,
    MAX(Salary) AS Maximum_per_state,
    AVG(Salary) AS Average_per_state 
from
    (select 
         Month_ending,
         Emp_id,Salary,
         Descrip
     from 
         Dim_state 
     full join 
         Dim_city ON Dim_state.State_id = Dim_city.State_id  
     full join
         Employee_details ON Dim_city.City_id = Employee_details.City_id 
     where 
         Month_ending = 20150131) s 
GROUP BY 
    Descrip

但是我得到了这个输出:

description min_sal max_sal  avg_sal
Delhi       30000    34000   32000
maharastra  25000    35000   30000
tamil nadu  35000    50000   42000
Westbengal  25000   50000    37500

问题是班加罗尔和果阿失踪了。

我可以知道哪个部分出了问题吗?

3 个答案:

答案 0 :(得分:1)

其实你错过了这一点。 dim_state有 PK 所以当dim_city有 FK 时会在左侧,所以这将在右侧,所以make 右连接

  SELECT ds.descip
,min(salary) min_salary
,max(salary) max_salary
,avg(salary) avg_salary
FROM dim_state ds
RIGHT JOIN dim_city dc ON ds.state_id = dc.state_id
FULL JOIN employee_details ed ON ed.city_id = dc.city_id
WHERE Month_ending = 20150131
GROUP BY ds.descip

答案 1 :(得分:0)

您有内部查询的结果是什么?

你可以直接试试这个(只是使用左连接并且没有使用内部查询)?

SELECT ds.descip
    ,min(salary) min_salary
    ,max(salary) max_salary
    ,avg(salary) avg_salary
FROM dim_state ds
LEFT JOIN dim_city dc ON ds.state_id = dc.state_id
LEFT JOIN employee_details ed ON ed.city_id = dc.city_id
WHERE Month_ending = 20150131
GROUP BY ds.descip

答案 2 :(得分:0)

当您使用FULL,LEFT或RIGHT JOIN时,连接顺序也很重要。

SELECT ds.descip
,min(salary) min_salary
,max(salary) max_salary
,avg(salary) avg_salary
 FROM employee_details ed
      LEFT JOIN dim_city dc ON ed.city_id= dc.city_id
      LEFT JOIN dim_state ed ON dc.state_id = dc.state_id
            WHERE Month_ending = 20150131
            GROUP BY ds.descip