SQL Server查询:如何将明细表的账户ID替换为对应名称
问题描述
有两张表:表H为表头表,表B为明细表。
表H结构及数据:
| ACCID | AccName |
|---|---|
| 1 | Acc1 |
| 2 | Acc2 |
| 3 | Acc3 |
表B结构及数据:
| ID | AccID_receive | AccID_payment |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
期望查询结果:
| ID | AccID_receive | AccID_payment |
|---|---|---|
| 1 | Acc1 | Acc2 |
| 2 | Acc1 | Acc2 |
| 3 | Acc2 | Acc3 |
你尝试的SQL语句仅关联了一次表H,只能获取AccID_receive对应的名称,无法同时匹配AccID_payment的对应名称,因此不符合需求。
正确的SQL Server查询语句
需要两次关联表H,分别为接收账户和支付账户匹配对应的名称,通过别名区分两次关联的表:
SELECT B.ID, H_receive.AccName AS AccID_receive, H_payment.AccName AS AccID_payment FROM B LEFT JOIN H AS H_receive ON B.AccID_receive = H_receive.ACCID LEFT JOIN H AS H_payment ON B.AccID_payment = H_payment.ACCID
说明
- 给两次关联的表H设置
H_receive和H_payment别名,避免字段冲突 - 使用
LEFT JOIN保证即使某个ID在表H中无匹配项,B表的记录仍会被保留(若业务要求ID必须存在匹配,可改为INNER JOIN) - 通过
AS将查询出的AccName重命名为目标列名,与期望结果格式一致
内容的提问来源于stack exchange,提问作者Ahmed Saif
相关产品推荐
相关产品推荐

