如何在SQL中将两个表中的值一起获取

时间:2015-05-21 09:34:24

标签: sql union

我有2张桌子

1. emp_mst
empcode empname
001     abc
002     def

2. leavetotal
empcode leave 
001     10
001     5
001     2
002     12
002     8

现在我想从emp_mst中获取empcode和empname 以及从总投递中休假的总数。我不知道如何得到它。 提前谢谢。

3 个答案:

答案 0 :(得分:1)

在FROM子句中,您可以指定多个表,这将产生两个表的笛卡尔积。因此,表中的每一行都将与所有其他表中的每一行连接。这当然不是您想要的,您只希望连接具有相同empcode的行。所以需要在WHERE CLAUSE中指定。

SELECT 
       MST.EMPCODE, 
       MST.EMPNAME, 
       SUM(LTO.LEAVE) 
FROM 
       EMP_MST MST, 
       LEAVETOTAL LTO 
WHERE 
       MST.EMPCODE = LTO.EMPCODE 
GROUP BY 
         EMPCODE, 
         EMPNAME

答案 1 :(得分:0)

您正在寻找加入,然后是一个小组:

SELECT   em.empcode, empname, SUM(leave)
FROM     emp_mst em
JOIN     leavetotal l ON em.empcode = l.empcode
GROUP BY em.empcode, empname 

答案 2 :(得分:0)

JOIN / GROUP BY解决方案:

select e.empcode, e.empname, SUM(l.leave)
from emp_mst e
  left join leavetotal l on e.empcode = l.empcode
group by e.empcode, e.empname

LEFT JOIN甚至列出那些没有休假的人。 (如果不需要,只需JOIN。)

相关的子选择解决方案:

select e.empcode, e.empname,
       (select SUM(l.leave) from leavetotal l
        where e.empcode = l.empcode)
from emp_mst e