Sql server 尝试使用另一个表中的数据更新表

Sql server 尝试使用另一个表中的数据更新表,sql-server,Sql Server,我有两个表,其中的日期字段与需要匹配的日期字段不匹配 首先,我有一个查询返回所有需要更新日期字段的记录列表 SELECT distinct ID_NUMBER FROM a INNER JOIN b ON a.ID_NUMBER = b.ID_NUMBER INNER JOIN c ON c.ID_NUMBER = b.ID_NUMBER INNER JOIN d ON c.ID_NUMBER = d.ID_NUMBER WHERE d.DATE <> b.DATE 返回20K加

我有两个表,其中的日期字段与需要匹配的日期字段不匹配

首先,我有一个查询返回所有需要更新日期字段的记录列表

SELECT distinct ID_NUMBER 
FROM a
INNER JOIN b
ON a.ID_NUMBER = b.ID_NUMBER
INNER JOIN c
ON c.ID_NUMBER = b.ID_NUMBER
INNER JOIN d
ON c.ID_NUMBER = d.ID_NUMBER
WHERE d.DATE <> b.DATE
返回20K加上ID_编号

我想更新表B,其中ID_编号=来自该查询的ID_编号列表

尝试:

UPDATE b
SET d.DATE = b.DATE
Where (select distinct ID_NUMBER 
from a
INNER JOIN b
ON a.ID_NUMBER = b.ID_NUMBER
INNER JOIN c
ON c.ID_NUMBER = b.ID_NUMBER
INNER JOIN d
ON c.ID_NUMBER = d.ID_NUMBER
Where d.DATE <> b.DATE
)

应该是直截了当的。似乎无法获取语法。感谢您的帮助。

我能够使此更新查询正常工作。您可以在上查看一些示例数据

UPDATE b 
SET d.DATE = b.DATE 
from a INNER JOIN b 
ON a.ID_NUMBER = b.ID_NUMBER 
INNER JOIN c ON c.ID_NUMBER = b.ID_NUMBER 
INNER JOIN d ON c.ID_NUMBER = d.ID_NUMBER 
Where d.DATE <> b.DATE

注意:这与@Sonam的答案类似,但SET子句需要设置b.DATE列而不是d.DATE列,因为表b正在更新。

因为它们都有相同的ID\U号,而且您只查看表b和d,您就不能这样做吗

UPDATE b
SET b.DATE = d.DATE
FROM b INNER JOIN d ON b.ID_NUMBER = d.ID_NUMBER
WHERE d.DATE <> b.DATE
  AND d.ID_NUMBER = b.ID_NUMBER;

SQL Fiddle链接:

Hi user123456可能重复,谢谢您的提问。如果你搜索这个网站,你会发现类似的问题。还要注意的是,您没有包括任何关于收到的错误的描述,也没有包括运行SQL时实际发生的情况。最后,您应该注意到更新b,SET d.DATE=b.DATE是不正确的-它可能应该是b.DATE=d.DATE。我确实在寻找其他解决方案。很抱歉谢谢你的快速回复。我在执行您发送的代码时遇到此错误:无法绑定多部分标识符b.DATE。您使用的SQL Server版本是什么?
UPDATE b
SET b.DATE = d.DATE
FROM b INNER JOIN d ON b.ID_NUMBER = d.ID_NUMBER
WHERE d.DATE <> b.DATE
  AND d.ID_NUMBER = b.ID_NUMBER;