SQL查询多表问题
Posted
技术标签:
【中文标题】SQL查询多表问题【英文标题】:SQL querying multiple table issue 【发布时间】:2015-08-19 13:31:37 【问题描述】:我有 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;
【问题讨论】:
尽量避免逗号分隔的连接! 您是否在表上设置了主键和外键? 在继续操作之前,您肯定应该摆脱ancient join syntax。 【参考方案1】:你快到了 - 你有经理的 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
【讨论】:
以上是关于SQL查询多表问题的主要内容,如果未能解决你的问题,请参考以下文章