You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关联多张数据库表?需查询员工住址与工作地点名称

问题需求

我有一个数据库,包含如下表结构,需要编写一条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;

说明

  1. 给两次关联的lib_address表分别起别名addr_personal(对应员工住址)、addr_work(对应工作地点),避免表名冲突。
  2. 使用CONCAT函数拼接员工名和姓得到完整姓名(无需拼接可直接保留两个字段输出)。
  3. 从两个别名表中分别提取对应地址名称,匹配预期输出字段。

内容的提问来源于stack exchange,提问作者user3146700

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 09:33:23