問題是您正在生成cartesian product。您現有的查詢在兩個表之間沒有任何JOIN
條件。您需要JOIN
表:
SELECT d.Location, d.DeptNo, e.Ename
FROM DEPARTMENTS d
INNER JOIN EMPLOYEES e
on d.deptno = e.deptno
WHERE e.DeptNo IN (10, 30)
Order BY Location ASC;
如果您需要幫助,在這裏學習JOIN
語法是一個偉大的visual explanation of joins。
見SQL Fiddle with Demo
INNER JOIN結果:
| LOCATION | DEPTNO | ENAME |
-----------------------------
| Loc2 | 10 | emp2 |
| Loc2 | 10 | emp3 |
| Loc3 | 30 | emp6 |
| Loc3 | 30 | emp4 |
| Loc3 | 30 | emp5 |
,你不使用JOIN
語法會產生這樣的結果的笛卡爾查詢(見SQL Fiddle with Demo):
| LOCATION | DEPTNO | ENAME |
-----------------------------
| Loc1 | 1 | emp6 |
| Loc1 | 1 | emp4 |
| Loc1 | 1 | emp2 |
| Loc1 | 1 | emp5 |
| Loc1 | 1 | emp3 |
| Loc2 | 10 | emp3 |
| Loc2 | 10 | emp6 |
| Loc2 | 10 | emp4 |
| Loc2 | 10 | emp2 |
| Loc2 | 10 | emp5 |
| Loc3 | 30 | emp3 |
| Loc3 | 30 | emp6 |
| Loc3 | 30 | emp4 |
| Loc3 | 30 | emp2 |
| Loc3 | 30 | emp5 |
如果你想在你之間使用逗號然後你必須必須包括jo在WHERE
子句中和條件,這將產生相同的結果INNER JOIN
版本:
select d.Location, d.DeptNo, e.ename
from departments d, employees e
WHERE e.DeptNo IN (10, 30)
and d.deptno = e.deptno
Order BY Location ASC;
首先,你需要谷歌'join'來看看如何停止screwyness。那麼你需要Google'Group By'來學習如何合計數字。 – Laurence
[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) –