2016-06-16 5 views
-1

と別のテーブルの結果に基づいてテーブルを更新し、私は2つの私のデータベース内のテーブル、そのうちの一つがDescriptionが含まれており、Code列を持っているSQL Serverの:サブ

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を表2のIdに更新しますが、表1の説明と一致するように表2の説明をトリミングするには部分文字列を使用する必要があります。

私はすでに、次のされサブクエリを、書いた:

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

ここでこの権利は、括弧内のテキストだけで罰金トリムが、問題は私ができるように見えることはできませんということですTable_1のコード列をTable_2の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サーバーを使用すると、更新ステートメントで結合を使用できます。

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)