如何关联多张数据库表?需查询员工住址与工作地点名称
问题需求
我有一个数据库,包含如下表结构,需要编写一条SQL查询语句,输出员工的住址名称与工作地点名称。
表结构
- workers(员工表):包含字段
work_code(工号)、first_name(名)、last_name(姓)、address_code(住址编码) - work_details(工作详情表):包含字段
work_code(工号)、address_code(工作地点编码)、work_type(工作类型) - lib_address(地址字典表):包含字段
address_code(地址编码)、address_name(地址名称)
预期输出
输出内容包含:员工姓名、住址名称、工作地点名称
尝试的查询语句
SELECT workers.first_name, workers.last_name, workers.address_code, lib_address.address_name AS personal_address, work_details.address_code, work_details.work_type, lib_address.address_name AS work_address FROM workers JOIN work_details ON workers.work_code=work_details.work_code JOIN lib_address ON work_details.address_code=lib_address.address_code;
问题分析与修正
当前查询仅关联了一次lib_address表,只能获取工作地点的地址名称,无法同时拿到员工住址对应的地址名称。需要两次关联lib_address表,分别匹配员工住址编码和工作地点编码,通过别名区分两个关联实例。
正确SQL语句
SELECT CONCAT(workers.first_name, ' ', workers.last_name) AS 员工姓名, addr_personal.address_name AS 住址名称, addr_work.address_name AS 工作地点名称 FROM workers JOIN work_details ON workers.work_code = work_details.work_code JOIN lib_address AS addr_personal ON workers.address_code = addr_personal.address_code JOIN lib_address AS addr_work ON work_details.address_code = addr_work.address_code;
说明
- 给两次关联的
lib_address表分别起别名addr_personal(对应员工住址)、addr_work(对应工作地点),避免表名冲突。 - 使用
CONCAT函数拼接员工名和姓得到完整姓名(无需拼接可直接保留两个字段输出)。 - 从两个别名表中分别提取对应地址名称,匹配预期输出字段。
内容的提问来源于stack exchange,提问作者user3146700
相关产品推荐
相关产品推荐

