我的数据库中有2个表,其中一个包含Description
和Code
列
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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
有什么想法吗?
感谢您的帮助!
答案 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)