如何使用另一个表数据TSQL更新一列数据

我刚刚意识到我一直在为表中的一列捕获错误的数据.我已经解决了这个问题,但到目前为止我捕获的数据仍然不正确.

让我们将表格命名为TableIWantToCorrect和TableWithIDs

在TableIWantToCorrect中,我有一个TableWithIDs的外键.这是不正确的.

我可以通过将TableIWantToCorrect中的列的子字符串与TableWithIDs中的列进行比较来更正数据.

所以目前,我有

TableIWantToCorrect

Name            ForeignKey
123-abc-123        15
456-def-456        15
789-ghi-789        15

TableWithIDs

CompareName    id
abc            1
def            2
ghi            3

因此,当Name中的子字符串等于Compare name中的子字符串时,我想更新TableIWantToCorrect以获得正确的ForeignKey值.子字符串的位置始终相同,因此我可以使用Substring方法.

我的尝试:

Update TableIWantToCorrect
SET ForeignKey =
       (SELECT id 
        FROM TableWithIDs 
        WHERE UPPER(CompareName) = UPPER((SUBSTRING(TableIWantToCorrect.Name, 4, 3)))

结果 :

Subquery returned more than 1 value. This is not permitted when the
subquery follows =, !=, <, <= , >, >= or when the subquery is used as
an expression. The statement has been terminated.

我知道我做了些傻事.我在这里做错了什么?

最佳答案
该错误是因为您的子查询返回了UPDATE的多条记录.要解决此问题,您可以使用更新的JOIN来执行此操作

UPDATE t1
SET ForeignKey = t2.id
FROM TableIWantToCorrect t1
INNER JOIN TableWithIDs t2
    ON UPPER(t2.CompareName) = UPPER(SUBSTRING(t1.Name, 4, 3))

转载注明原文:如何使用另一个表数据TSQL更新一列数据 - 代码日志