2016-08-17 31 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 + '%')