如何在VB.NET中用4个唯一列内连接3张表并更新LBSTS的CIA列
问题描述
需要在VB.NET中执行一条更新查询,通过4个唯一列内连接三张表(LBSTS、GSDTS、GSGTS),将LBSTS表的CIA列更新为GSDTS表的CIU列。现有两表连接的更新SQL示例如下:
update LBSTS as t1 inner join GSDTS as t2 on t1.[PNM] = t2.[PNM] AND t1.[NOD] = t2.[NOD] AND t1.[ITM] = t2.[ITM] set t1.[CIA] = t2.[CIU] WHERE t1.PNM=@PNM
示例数据
表名:GSDTS
| PNM | ITM | QTY | CIU |
|---|---|---|---|
| 1000 | TEST R 1001 | 10 | 20000 |
| 1000 | TEST R 1002 | 20 | 10000 |
表名:GSGTS
| PNM | DTS | SAC |
|---|---|---|
| 1000 | 06/12/2022 | 01-01 |
表名:LBSTS
| RFN | DTS | ITEM | QTY | CIA |
|---|---|---|---|---|
| 1000 | 06/12/2022 | TEST R 1001 | 10 | 1 |
| 1000 | 06/12/2022 | TEST R 1002 | 20 | 1 |
备注
- 列SAC与RFN内容一致
- 列CIU与CIA内容对应(需将CIA更新为CIU的值)
期望输出
表名:GSDTS(无变化)
| PNM | ITM | QTY | CIU |
|---|---|---|---|
| 1000 | TEST R 1001 | 10 | 20000 |
| 1000 | TEST R 1002 | 20 | 10000 |
表名:GSGTS(无变化)
| PNM | DTS | SAC |
|---|---|---|
| 1000 | 06/12/2022 | 01-01 |
表名:LBSTS(CIA列已更新)
| RFN | DTS | ITEM | QTY | CIA |
|---|---|---|---|---|
| 1000 | 06/12/2022 | TEST R 1001 | 10 | 20000 |
| 1000 | 06/12/2022 | TEST R 1002 | 20 | 10000 |
解决方案
根据三张表的关联逻辑和4个唯一列的要求,修改后的SQL语句如下:
update LBSTS as t1 inner join GSDTS as t2 on t1.[RFN] = t2.[PNM] AND t1.[DTS] = t2.[NOD] -- 对应原SQL中的NOD列,匹配示例数据的DTS字段 AND t1.[ITEM] = t2.[ITM] inner join GSGTS as t3 on t1.[RFN] = t3.[PNM] AND t1.[RFN] = t3.[SAC] -- 按备注要求关联RFN与SAC列 AND t1.[DTS] = t3.[DTS] set t1.[CIA] = t2.[CIU] WHERE t1.RFN=@PNM -- 原SQL的PNM对应示例数据的RFN字段
逻辑说明
- 保留LBSTS与GSDTS的核心关联,同时将原SQL中的列名与示例数据对应对齐:
t1.RFN对应原PNM,t1.DTS对应原NOD,t1.ITEM对应原ITM。 - 新增与GSGTS的内连接,通过三个关联条件覆盖4个唯一列:
t1.RFN = t3.PNM:关联跨三表的PNM字段t1.RFN = t3.SAC:按备注要求关联RFN与SAC字段t1.DTS = t3.DTS:关联跨两表的DTS字段
加上与GSDTS关联的ITEM/ITM字段,正好凑齐4个唯一关联列。
- 仅更新LBSTS的CIA列,赋值为GSDTS的CIU列值,WHERE条件匹配业务需求。
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

