2016-08-17 34 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_names與Object_name相匹配,然後更新color_cat列中的空值。

我現在的方法是將shades_table導出到csv文件。然後,我寫了一個Java程序讀取csv文件,並輸出到SQL文件到服務器上運行:

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程序輸出)。帶2 SET的UPDATE語句不起作用。 例如

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

不起作用, 給人「‘設置’關鍵字附近有語法錯誤。

+0

好吧,我不知道正確的語法應更新 集a.color_cat = b.category, a.location2 = b.location ....我不應該第二次輸入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 + '%')