如何在 SQL 中同时从 2 个表中获取值
How to get the values from 2 tables together in SQL
我有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
leavetotal.I 的总休假天数不知道如何获得。
提前致谢。
在 FROM 子句中,您可以指定多个 table,这将导致两个 table 的笛卡尔积。因此,a table 中的每一行都将与所有其他 table 中的每一行相连。这当然不是您想要的,您只希望连接具有相同 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
您正在寻找一个加入,然后是一个分组:
SELECT em.empcode, empname, SUM(leave)
FROM emp_mst em
JOIN leavetotal l ON em.empcode = l.empcode
GROUP BY em.empcode, empname
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解法:
select e.empcode, e.empname,
(select SUM(l.leave) from leavetotal l
where e.empcode = l.empcode)
from emp_mst e
我有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
leavetotal.I 的总休假天数不知道如何获得。
提前致谢。
在 FROM 子句中,您可以指定多个 table,这将导致两个 table 的笛卡尔积。因此,a table 中的每一行都将与所有其他 table 中的每一行相连。这当然不是您想要的,您只希望连接具有相同 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
您正在寻找一个加入,然后是一个分组:
SELECT em.empcode, empname, SUM(leave)
FROM emp_mst em
JOIN leavetotal l ON em.empcode = l.empcode
GROUP BY em.empcode, empname
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解法:
select e.empcode, e.empname,
(select SUM(l.leave) from leavetotal l
where e.empcode = l.empcode)
from emp_mst e