1. 问题背景与需求分析
1378号题目是一个典型的数据表关联查询问题,主要考察SQL中的JOIN操作和NULL值处理能力。在实际业务场景中,这种需求非常常见——我们需要将两个相关但信息不完整的表进行关联,并处理其中可能存在的缺失数据。
题目给出了两个表:
- Employees表:存储员工基础信息(id和name)
- EmployeeUNI表:存储员工唯一标识码(id和unique_id)
核心需求是:为每位员工显示其唯一标识码,如果该员工没有对应的unique_id,则显示为NULL。从业务角度理解,这相当于一个"员工信息补全"操作,我们需要将分散在两个表中的信息合并展示。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据表结构与关系解析
2.1 Employees表结构分析
sql复制CREATE TABLE Employees (
id INT PRIMARY KEY,
name VARCHAR(255)
);
这是员工基础信息表,其中:
- id是主键,保证每个员工有唯一标识
- name存储员工姓名
2.2 EmployeeUNI表结构分析
sql复制CREATE TABLE EmployeeUNI (
id INT,
unique_id INT,
PRIMARY KEY (id, unique_id)
);
这是员工唯一标识码表,特点:
- 使用复合主键(id, unique_id),意味着一个员工可能有多个unique_id(虽然题目示例中每个id只对应一个unique_id)
- 没有包含所有员工的信息(如示例中的Alice和Bob就没有记录)
2.3 表关系说明
两表通过id字段关联,是一对一或一对零的关系(一个员工可能有也可能没有unique_id)。这种关系在数据库设计中很常见,通常用于存储可选或补充信息。
3. SQL解决方案详解
3.1 基础JOIN方案
题目提供的解决方案使用了LEFT OUTER JOIN:
sql复制SELECT unique_id, name
FROM Employees
LEFT OUTER JOIN EmployeeUNI ON (Employees.id = EmployeeUNI.id)
这个查询
