2014-04-27 44 views
0

有了這3個表MYSQL與SELECT子句與三個不同的表

首先一個,EMPLOYEE

//Employee 
E#  ENAME   D# 
----------------------- 
1  ALI   1 
2  SITI   2 
3  JOHN   2 
4  MARY   3 
5  CHIRS   3 

二,項目

//PROJECT 
P#  PNAME  D# 
----------------------- 
1  Computing  1 
2  Coding  3 
3  Researching 3 

三,WORKSON

//WORKSON 
E#  P#  Hours 
-------------------- 
1  1  3 
1  2  5 
4  3  6 

所以我的輸出應該是somet hing like

E#  ENAME  D#  TOTAL HOURS/W 
-------------------------------------------- 
1   ALI  1    8 
2  SITI  2    0 
3  JOHN  2    0 
4   MAY  3    6 
5  CHIRS  3    0 

顯示0,因爲員工沒有可以工作的項目。

我目前使用

SELECT E.E#,E.NAME,E.D#,NVL(sum(Hours),0) AS "TOTAL HOURS/W" 
    FROM Employee E,WORKSON W WHERE E.E#=W.E# OR 
GROUP BY E.E#,E.NAME,E.D#; 

不知道應該如何選擇,然後將顯示所有員工不僅是具體的E·語句。彷彿員工沒有任何項目上它的工作原理是顯示 輸出,它應該與0值顯示

+0

考慮提供適當的DDL(和/或sqlfiddle)連同你使用的是Oracle或MySQL SET – Strawberry

+0

期望的結果?請用適當的數據庫標記問題。 –

回答

1

可以這樣做加盟唯一的員工和WORKSON作爲

select 
e.`E#`, 
e.ENAME, 
e.`D#`, 
coalesce(tot,0) as `TOTAL HOURS/W` 
from Employee e 
left join 
(
    select `E#`, 
    sum(Hours) as tot 
    from WORKSON 
    group by `E#` 
)w 
on w.`E#` = e.`E#` 
group by e.`E#` 

DEMO

+0

我可不想與coalesce一起工作嗎? 有另一種選擇?因爲我沒有清楚地使用 – user3553846

+0

而沒有合併,所以在連接表中沒有數據的情況下,TOTAL HOURS/W將顯示爲NULL,因此使用合併無害。 –

0

您應該使用left outer join。下面應在MySQL和甲骨文工作:

SELECT E.E#, E.NAME, E.D#, 
     COALESCE(SUM(Hours), 0) AS "TOTAL HOURS/W" 
FROM Employee E LEFT OUTER JOIN 
    WORKSON W 
    ON E.E# = W.E# 
GROUP BY E.E#, E.NAME, E.D#;