在SQL中更新字段,如果匹配许多值中的一个

时间:2014-09-03 19:43:35

标签: sql

我尝试更新列,如果另一列匹配很多值中的一列。目前我这样做,但必须有更好的方法吗?

UPDATE table
SET Column1 ='awesomeness'
WHERE Column2 LIKE 'somedata' 
    OR Column2 LIKE 'someotherdata' 
    OR Column2 LIKE 'someotherdataagain' 
    OR Column2 LIKE 'orthis' 
    OR Column2 LIKE 'orthat';

我认为这样的事情应该是可能的:

UPDATE table
SET Column1 ='awesomeness'
WHERE Column2 LIKE ('somedata' OR 'someotherdata' OR 'someotherdataagain' OR 'andthis' OR 'andthat');

但这并不起作用,并且在第2栏和第34页前面移动第一个加重点。只需在表格中的每一行上运行更新。

编辑:对不起,我的第一篇文章并不准确。我实际上使用通配符,所以我的查询看起来像这样

UPDATE table
SET Column1 ='awesomeness'
WHERE Column2 LIKE 'somedata____' 
    OR Column2 LIKE 'someotherdata____' 
    OR Column2 LIKE 'orthis____' 
    OR Column2 LIKE 'orthat____';

3 个答案:

答案 0 :(得分:3)

您应该使用IN子句。它看起来像这样:

UPDATE table SET 
Column1 ='awesomeness' 
WHERE 
Column2 IN ('somedata', 'someotherdata' ,'someotherdataagain', 'andthis', 'andthat');

正如其他人所说,IN子句不适用于通配符LIKE查询 - 如果您使用的是通配符。在你的例子中,你不是。

如果要执行不区分大小写的IN - 您可以使用LOWER函数将Column2转换为小写。在这种情况下,因为所有字符串都是小写的 - Column2中的大小写将被忽略。例如:

UPDATE table SET 
Column1 ='awesomeness' 
WHERE 
LOWER(Column2) IN ('somedata', 'someotherdata' ,'someotherdataagain', 'andthis', 'andthat');

如果您需要使用通配符,则必须使用帖子中的语法:

UPDATE table
SET Column1 ='awesomeness'
WHERE Column2 LIKE 'somedata____' OR Column2 LIKE 'someotherdata____' OR Column2 LIKE 'orthis____' OR Column2 LIKE 'orthat____';

答案 1 :(得分:0)

看起来你正试图对某些字符串进行Column2的精确匹配。在这种情况下,您可以通过=运算符更改LIKE运算符,因此,您可以将IN运算符用于多个值。

因此,您的查询将如下所示:

UPDATE表SET column1 ='value1'其中column2 IN('value2','value3','value4','valueN');

答案 2 :(得分:0)

您可以将通配符值放在表变量中并加入它。

create table Words (Word varchar(100));

insert into Words (Word)
values ('Computer'),('Monitor'),('Mouse'),('Keyboard');


declare @match table (Wildcard varchar(100))

insert into @match (Wildcard)
values ('%put%'),('M%')
-- Computer, Monitor, Mouse should match


update w
set Word = 'New' + Word
from Words w
join @match m
  on w.Word like m.Wildcard

select * from Words

你可以在这里演示...... SQL Fiddle