首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MYSQL中使用多个条件

在MYSQL中使用多个条件
EN

Stack Overflow用户
提问于 2016-11-23 00:25:50
回答 3查看 84关注 0票数 5

如何在SQL更新案例中使用多个条件?

代码语言:javascript
运行
复制
COLUMN1      COLUMN2   COLUMN3
BG1         STANDARD
FOX1        STANDARD
BRB         STANDARD
NBC         STANDARD
FOX2        STANDARD
CNN3        STANDARD
GAM1        STANDARD
AI1         STANDARD
CQN3        STANDARD
GSM1        STANDARD
OFD1        STANDARD
REST         NONSTANDARD
WEST         NONSTANDARD
EAST         NONSTANDARD

我希望设置column3 =1,其中第1列以下列任何名称(BG1、FOX1、BRB、NBC、CNN3、GAM1、AI1 )以及COLUMN2 =标准名称

并设置column3 = -2,其中column1不在以下名称中(BG1、FOX1、BRB、NBC、CNN3、GAM1、AI1)和Column2 =标准。

我写了这些

代码语言:javascript
运行
复制
UPDATE SET COLUMN3 = 1  
WHERE (COLUMN2 = 'STANDARD' AND COLUMN1 = 'BG1' OR 'FOX1'OR 'BRB' OR 'NBC' OR 'CNN3' OR 'GAM1' OR 'AI1') 

UPDATE SET COLUMN3 = -2 
WHERE (COLUMN2 = 'STANDARD' AND COLUMN1 !='BG1' OR 'FOX1'OR 'BRB' OR 'NBC' OR 'CNN3' OR 'GAM1' OR 'AI1')

这不管用。有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-23 02:21:12

让我们先来看看这个:

代码语言:javascript
运行
复制
UPDATE SET COLUMN3 = 1  
WHERE (COLUMN2 = 'STANDARD' AND COLUMN1 = 'BG1' OR 'FOX1'OR 'BRB' OR 'NBC' OR 'CNN3' OR 'GAM1' OR 'AI1') 

在WHERE子句的后半部分,您有OR 'FOX1'OR 'BRB' OR 'NBC' OR 'CNN3' OR 'GAM1' OR 'AI1',这个部分总是计算为False。您不能将这些文本与任何专栏进行比较。如果您将它们与没有brakcets的column1进行比较,则几乎总是将其计算为真,因为在列中有许多匹配值。为自己检查

代码语言:javascript
运行
复制
SELECT 1 and 0 and 0 or 1 or 0;
SELECT 1 and 'aa' or 'bbb'

第一个总是计算为真,第二个计算为假。这正是在你的查询中发生的事情。重写为

代码语言:javascript
运行
复制
UPDATE SET COLUMN3 = 1  
WHERE (COLUMN2 = 'STANDARD' AND COLUMN1 = 'BG1') AND (column1 = 'FOX1' OR column1 = 'BRB' OR column1 = 'NBC' OR column1 = 'CNN3' OR column1 = 'GAM1' OR column1 = 'AI1')

另一个选择

代码语言:javascript
运行
复制
UPDATE SET COLUMN3 = 1  
WHERE (COLUMN2 = 'STANDARD' AND COLUMN1 = 'BG1') AND column1 = IN ('FOX1','BRB','NBC','CNN3','GAM1','AI1')
票数 0
EN

Stack Overflow用户

发布于 2016-11-23 04:22:59

你想要使用in

代码语言:javascript
运行
复制
UPDATE t
    SET COLUMN3 = 1  
   WHERE COLUMN2 = 'STANDARD' AND COLUMN1 IN ('BG1', 'FOX1', 'BRB', 'NBC', 'CNN3', 'GAM1', 'AI1') ;

UPDATE t
    SET COLUMN3 = -2 
    WHERE COLUMN2 = 'STANDARD' AND COLUMN1 NOT IN ('BG1', 'FOX1', 'BRB', 'NBC', 'CNN3', 'GAM1', 'AI1') ;

您还可以使用CASE将其表示为单个语句。

代码语言:javascript
运行
复制
UPDATE t
    SET COLUMN3 = (CASE WHEN COLUMN1 IN ('BG1', 'FOX1', 'BRB', 'NBC', 'CNN3', 'GAM1', 'AI1') THEN 1  
                        ELSE -2
                   END)
   WHERE COLUMN2 = 'STANDARD' ;
票数 0
EN

Stack Overflow用户

发布于 2016-11-23 05:12:21

更新TableName集COLUMN3 = '1‘

其中COLUMN2 =“STANDARD”和column1 IN (“Bg1”、“FOX1 1”、“BRB”、“NBC”、“CNN3”、“GAM1 1”、“AI1”)

更新TableName集COLUMN3 = '-3‘

其中COLUMN2 =“STANDARD”和column1不在(“Bg1”、“FOX1 1”、“BRB”、“NBC”、“CNN3”、“GAM1 1”、“AI1”)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40754094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档