0

テーブル(table1)に新しい列を作成しました。別のテーブルtable2のデータを入力しようとしています。

Table1には、「名前」という列があります。「名前」には、列の言語を示す部分文字列が含まれています。この部分文字列をtable2の「Language」列と比較したいと思います。この列には名前列に部分文字列が含まれており、対応するLanguageIDを新しい列に挿入します。

したがって、たとえば:

table1
Name
xxXxxxXxxxxxzxzxzxz xxxazxzxxXXXZxxzxzx 2183909213 ENG-UK nfjksdnfnd 723984782347

およびtable2:

table2
    Language | ID 
    ENG-uk   | 1

table1の名前の列では、言語の前後の文字列は、さまざまな文字数の任意の形式をとることができます。言語には常に前後にスペースがあります。

だから、私は最終的に:

table1
Name  | LanguageID
xx... | 1

私は私がうまくいくはずだと信じているこのクエリを持っています:

INSERT INTO table1 (LanguageID) 
SELECT t2.ID FROM table2 t2, table1 t1 WHERE CHARINDEX(LOWER(t2.Language), LOWER(t1.Name)) != null

問題は、これを実行すると.... "(0行が影響を受ける)"ですが、そうではないはずです。

誰かアイデアはありますか?

4

3 に答える 3

2

一致がまったく得られない理由は、!=演算子を使用してnull値を比較できないため、is not nullそのために使用する必要があります。

charindexただし、からの戻り値がnullになることはないため、非常に大きな結果が得られます。文字列が見つからない場合はゼロが返されるため、これと比較する必要があります。

また、列を挿入することはできません。最初に列をテーブルに追加してから、レコードを更新する必要があります。

update t1
set LanguageID = t2.ID 
from table1 t1
inner join table2 t2 on charindex(lower(t2.Language), lower(t1.Name)) != 0
于 2012-05-28T15:39:26.127 に答える
0

1つ目は、検索文字列が存在しない場合にCHARINDEX戻ります。0しませんnullhttp://msdn.microsoft.com/en-us/library/ms186323.aspxを参照してください

第二に、私はあなたがすべきUPDATEではないと思いますINSERT

例(t2.LanguageがUNIQUEでない場合、これは正しく機能しません):

UPDATE table1 t1
SET t1.LanguageID = (SELECT t2.ID from table2 t2 where CHARINDEX(LOWER(t1.Name), LOWER(t2.Language))>0)
where exists (SELECT t2.ID from table2 t2 where CHARINDEX(LOWER(t1.Name), LOWER(t2.Language))>0)
于 2012-05-28T15:40:11.550 に答える
-2

最初のテーブル情報に個々の列を追加することを検討する必要があります。Performance Issuesさもなければ、あなたは操作のために終わるでしょうSubString

最初のテーブルから、テーブルスキーマがではないことは明らかNormalizedです。さらに、Firstテーブルスキーマは、検索/並べ替え操作には適していません。

于 2012-05-28T15:35:35.667 に答える