2016-08-17 11 views
0

SQL Server 2008を使用しています。ここに2つのテーブルがあります。参照テーブルのデータ照合と挿入のためのストアドプロシージャ

shades_table 
color_name category location 
Aqua  Blue  House A 
Denim  Blue  House B 
Azure  Blue  House B 
Zaffre  Blue  House A 
Scarlet Red  House C 
Ruby  Red  House D 
Chili  Red  House D 
Crimson Red  House A 

objects_table 
object_name  color_cat location2 
Super Aqua shoes  Null  Null 
Azure wallet   Null  Null 
Awesome Scarlet chair Null  Null 
Ruby socks   Null  Null 
Sparkly Denim chalk Null  Null 
Chili paper   Null  Null 
Zaffre vase   Null  Null 
Sharp Crimson eraser Null  Null 
Crimson watch   Null  Null 
Excellent Scarlet bucket Null

私は参照テーブルshades_tableを持っています。列にはcolor_nameが含まれ、他の列には色のカテゴリが含まれます。

私はobjects_tableに取り組んでいます。 object_name列には色名が含まれています。プロシージャ/プログラムで、color_nameをObject_nameに自動的に一致させ、color_cat列のNull値を更新する必要があります。

私の現在の方法は、shades_tableをcsvファイルにエクスポートすることです。このメソッドは動作しますが、それは愚かだ、厄介

UPDATE objects_table SET color_cat='Blue', location2 = 'House A' WHERE object_name LIKE '%Aqua%' AND color_cat IS NULL 
UPDATE objects_table SET color_cat='Blue', location2 = 'House B' WHERE object_name LIKE '%Denim%' AND color_cat IS NULL 
UPDATE objects_table SET color_cat='Blue', location2 = 'House B' WHERE object_name LIKE '%Azure%' AND color_cat IS NULL 
etc...

:それから私は、サーバーで実行されるSQLファイルへのJavaのCSVファイルを読み込み、プログラム、および出力を書きました。 私はちょうど私が欲しいことをすることができるSQL文を書く方法を知らない。

更新: 私もマッチしたい余分な列を追加しました(Javaプログラムの出力を参照してください)。 2 SETのUPDATE文は機能しません。 例

 
update o 
set o.color_cat = s.category, 
set o.location2 = s.location 
... 

は は、「『設定』キーワードの近くに不正な構文を与え、動作しません。

+0

[OK]を、私は正しい構文が セットa.color_cat = b.category、 a.location2を更新する必要があります知りませんでした= b.location ....私は2回目のSETをタイプするべきではありません。ありがとう、Unnikrishnan R、あなたは最初に答えました。 –

答えて

0

ここで更新クエリである。

UPDATE a 
SET a.color_cat=b.category 
FROM objects_table a 
JOIN shades_table b ON a.[object_name] LIKE '%'+b.[color_name]+'%' 
WHERE a.color_cat IS null 

あなたはプロシージャとしてそれをしたい場合

CREATE PROCEDURE Updateobjectstable 
AS 
BEGIN 
    UPDATE a 
    SET a.color_cat=b.category 
    FROM objects_table a 
     JOIN shades_table b ON a.[object_name] LIKE '%'+b.[color_name]+'%' 
    WHERE a.color_cat IS null 
END 
0

私は手順を使用する理由がわかりませんタスクです。プレーンSQLが機能するはずです。

UPDATE objects_table ot 
SET color_cat = st.category 
FROM shades_table st 
WHERE ot.object_name ILIKE concat('%', st.color_name, '%') 
    AND ot.color_cat IS NULL 
0

シンプルupdate文はあなたのためにそれを行うだろう。

update o 
set o.color_cat = s.category 
from objects_table o 
    left join shades_table s 
     on(o.[object_name] like '%' + s.color_name + '%') 
関連する問題