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

Sim*_*ely 5 sql t-sql database sql-server sql-update

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

让我们来命名我的表TableIWantToCorrectTableWithIDs

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

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

所以目前,我有

TableIWantToCorrect

Name            ForeignKey
123-abc-123        15
456-def-456        15
789-ghi-789        15
Run Code Online (Sandbox Code Playgroud)

TableWithIDs

CompareName    id
abc            1
def            2
ghi            3
Run Code Online (Sandbox Code Playgroud)

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

我的尝试:

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

结果 :

子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.该语句已终止.

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

Tar*_*ryn 13

该错误是因为您的子查询返回了多个记录UPDATE.为了解决这个问题,你可以做到这一点使用JOIN与您的UPDATE

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