我想就我想要实现的要求寻求您的帮助。我不太确定如何处理此查询。
我在 Access 中有两个表表 A 和 表 B。
表 A 架构
员工_监督_姓名_A | 员工_A_ID | 员工_受监督_姓名_B | 员工_B_ID |
---|---|---|---|
乔 | 1234 | 史蒂夫 | 5612 |
马丁 | 7777 | 埃琳娜 | 2222 |
史密斯 | 鲍勃 | 2222 | |
迈克尔 | 5555 | Alexa | |
安娜 | 埃德加 | 6666 | |
莉莉 | 1010 | 阿隆索 | 2020 |
汉斯 | 卡洛斯 |
表 B 架构
员工_ID | 员工代码 |
---|---|
1234 | A |
5612 | B |
7777 | C |
5555 | D |
6666 | E |
2222 | F |
9999 | H |
预期结果
根据公共employee_id,我想映射employee_code
注意:也有可能表A的employee_id在表B中不存在或者该字段为空。对于这种情况,我只想返回具有空字段的行。
员工_监督_姓名_A | 员工_A_ID | 员工_代码_A | 员工_受监督_姓名_B | 员工_B_ID | 员工_代码_B |
---|---|---|---|---|---|
乔 | 1234 | A | 史蒂夫 | 5612 | B |
马丁 | 7777 | C | 埃琳娜 | 2222 | F |
史密斯 | 鲍勃 | 9999 | H | ||
迈克尔 | 5555 | D | Alexa | ||
安娜 | 埃德加 | 6666 | E | ||
莉莉 | 1010 | 阿隆索 | 2020 | ||
汉斯 | 卡洛斯 |
在创建表时,员工的 ID 通常被视为主键(因为它们是唯一标识符)。在您的情况下,您有两个员工表,它们有自己的主键,没有超级键连接在一起,在我看来,这是一个糟糕的模式设计。
但无论如何:-
select tt.Employee_supervise_name,tt.Employee_a_id, tt.employee_code_a, tt.Employee_Supervised_Name_B, tt.Employee_b_id, B.Employee_code as employee_code_b
from (select A.Employee_supervise_name, A.Employee_a_id, B.employee_code as employee_code_a, A.Employee_Supervised_Name_B, A.Employee_b_id
from
A left join B on A.Employee_a_id = B.Employee_id) as tt
left join B on tt.Employee_b_id = B.Employee_id ;