我尝试更新列,如果另一列匹配很多值中的一列。目前我这样做,但必须有更好的方法吗?
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____';
答案 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