SQL Server:根据具有子字符串的另一个表的结果更新表

时间:2016-06-16 13:13:28

标签: sql-server sql-update substring

我的数据库中有2个表,其中一个包含DescriptionCode

TABLE_1

Description  |  Code
--------------------
123 street      23
321 street2     12
342 blabla      1

另一个表有一个Id列和一个描述列

TABLE_2

Id  |  Description
------------------------------  
41     street (textidontwant)
22     street2 (textidontwant)
33     blabla (textidontwant)

基本上,我想要做的是使用表2中的Code更新表1中的Id,但是我需要使用子字符串来修剪表2中的描述以便文本与表1中的描述相匹配。

我已经编写了子查询,如下所示:

SELECT LEFT([Description], CHARINDEX('(', [Description]) - 1)) FROM Table_2

这里修改括号内的文本就好了,但问题是我似乎无法使用表2中的Id更新Table_1代码列

我试过这样做:

UPDATE Table_1
SET Code = (SELECT T2.Id FROM Table_2 T2)
WHERE Table_1.[Description] = (SELECT LEFT([Description], CHARINDEX('(', [Description]) - 1)) FROM Table_2)

但是我收到了这个错误:

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

有什么想法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

不要使用子查询。 Sql server允许您在更新语句中使用联接。

UPDATE T1
SET Code = T2.Id
FROM Table_1 T1 
INNER JOIN Table_2 T2 
    ON T1.[Description] = LEFT(T2.[Description], CHARINDEX('(', T2.[Description]) - 1)