2016-06-16 44 views
-1

我有我的數據庫2個表,其中一個包含DescriptionCodeSQL服務器:更新基於另一個表的結果的表與子串

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) 

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

我已經寫的子查詢,它是這樣的:

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

這裏這個權利修剪括號就好內的文本,但問題是,我似乎無法能夠用Table_2更新Table_1代碼列Id

我試過了這樣做:

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) 

,但我得到這個錯誤:

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

任何想法?

感謝您的幫助!

回答

0

請勿使用子查詢。 Sql server允許你在更新語句中使用Joins。

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) 
相關問題