2015-06-04 77 views
2

我有3個表,子,員工和部門有一些樣本數據。我需要獲取:SQL查詢多表問題

  1. 孩子的名字
  2. 名字和相應員工
  3. 名字和該員工的經理姓的姓氏。

我想根據上述標準分隔列中的數據。

子表:

+-----------+-------+ 
| empld_id | name | 
+-----------+-------+ 
| 123456789 | Manny | 
| 333445555 | Joy | 
| 987654321 | abner | 
+-----------+-------+ 

職員表:

+-------+-------+-----------+-----+-----------+--------+ 
| fname | lname | ssn | sex | superssn | deptNo | 
+-------+-------+-----------+-----+-----------+--------+ 
| john | smith | 123456789 | m | 333445555 |  5 | 
+-------+-------+-----------+-----+-----------+--------+ 

部門表:

+-----------------+--------+------------+ 
| department_name | deptNo | managerssn | 
+-----------------+--------+------------+ 
| HQ    |  1 | 8888665555 | 
| admin   |  4 | 9876543211 | 
+-----------------+--------+------------+ 

我現在有這個疑問:

select 
    A.name, 
    B.fname, 
    B.lname 
from 
    child A, 
    employee B, 
    department C 
where 
    A.empld_id= B.ssn and 
    C.managerssn = B.ssn; 
+0

儘量避免用逗號分隔的連接! –

+0

你在桌子上設置了主鍵和外鍵嗎? – kojow7

+0

您當然應該擺脫[古代加入語法](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins .aspx),然後再繼續。 – Zane

回答

3

你幾乎在那裏 - 你有經理的SSN - 現在你所需要做的就是將其加入員工表以獲得他的詳細信息。

要繼續查詢的風格:但是

SELECT c.name, 
     e.fname, e.lname, 
     m.fname AS manager_fname, m.lname AS manager_lname 
FROM child c, employee e, department d, employee m 
WHERE c.empid_id = e.ssn AND d.managerssn = e.ssn AND m.ssn = d.managerssn 

注意的是,隱式連接(具有from子句中的多個表)已被棄用了一段時間了,並且它的建議,以避免他們和使用明確的join s改爲:

SELECT c.name, 
     e.fname, e.lname, 
     m.fname AS manager_fname, m.lname AS manager_lname 
FROM child c 
JOIN employee e ON c.empid_id = e.ssn 
JOIN department d ON d.managerssn = e.ssn 
JOIN employee m ON m.ssn = d.managerssn 
+0

非常感謝你! – Manu