首页 > 解决方案 > 使用联接更新 SQL 中的查询

问题描述

我正在使用带有 JOIN 子句的 SQL UPDATE 语句。

每当我更新表时,都会为所有行更新相同的数据。

下面是用于更新表的 SQL 查询

update table3 set 
[C1]=TABLE2.CUSTOMER_ID,
[C2]=TABLE2.LOAN_AMOUNT,
[C3]=TABLE2.SOURCE,
[C4]=TABLE2.AMT,
[C5]=TABLE2.REG_NO,
FROM TABLE2 
INNER JOIN TABLE1  ON TABLE1.CID = TABLE2.CUSTOMER_ID
where TABLE2.CUSTOMER_ID IN (SELECT CID FROM TABLE1)

当我使用 select 语句选择上述查询时,数据不会重复。这是下面的声明。

select 
[C1]=TABLE2.CUSTOMER_ID,
[C2]=TABLE2.LOAN_AMOUNT,
[C3]=TABLE2.SOURCE,
[C4]=TABLE2.TEAM_MEMBER,
[C5]=TABLE2.TEAM_LEADER,
FROM TABLE2 
INNER JOIN TABLE1  ON TABLE1.CID = TABLE2.CUSTOMER_ID
where TABLE2.CUSTOMER_ID IN (SELECT CID FROM TABLE1)

让我知道更新查询中的问题是什么,因为 select 语句工作正常。

标签: sqlsql-serversql-updateinner-joininsert-update

解决方案


对于连接更新,您将要更新的表指定为子句的一部分FROM,然后在顶部使用其别名引用它:

我注意到WHERE一旦你加入了这个子句就完全没有必要了

update t3
set 
 [C1] = t2.CUSTOMER_ID,
 [C2] = t2.LOAN_AMOUNT,
 [C3] = t2.SOURCE,
 [C4] = t2.AMT,
 [C5] = t2.REG_NO,
FROM TABLE2 t2
INNER JOIN TABLE1 t1 ON t1.CID = t2.CUSTOMER_ID
INNER JOIN table3 t3 ON t3.[C1] = t2.CUSTOMER_ID;

推荐阅读