【问题标题】:USE MULTIPLE CONDITIONS IN MYSQL在 MYSQL 中使用多个条件
【发布时间】:2016-11-23 13:12:21
【问题描述】:

如何在 SQL UPDATE CASES 中使用多个条件?

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 = STANDARD。

这些都是我写的

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')

它不工作。有什么建议吗?

【问题讨论】:

标签: mysql sql


【解决方案1】:

我们先来看看这个:

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。您没有将这些文本与任何列进行比较。如果您将它们与不带括号的 column1 进行比较,它几乎总是会评估为 true,因为该列具有这些值之一的匹配项很多。自己检查

SELECT 1 and 0 and 0 or 1 or 0;
SELECT 1 and 'aa' or 'bbb'

第一个总是为真,第二个为假。这正是您的查询中发生的事情。改写为

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')

或者

UPDATE SET COLUMN3 = 1  
WHERE (COLUMN2 = 'STANDARD' AND COLUMN1 = 'BG1') AND column1 = IN ('FOX1','BRB','NBC','CNN3','GAM1','AI1')

【讨论】:

    【解决方案2】:

    你想使用in:

    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 将其表达为单个语句:

    UPDATE t
        SET COLUMN3 = (CASE WHEN COLUMN1 IN ('BG1', 'FOX1', 'BRB', 'NBC', 'CNN3', 'GAM1', 'AI1') THEN 1  
                            ELSE -2
                       END)
       WHERE COLUMN2 = 'STANDARD' ;
    

    【讨论】:

      【解决方案3】:

      更新表名 SET COLUMN3 = '1'
      WHERE COLUMN2 = 'STANDARD' AND column1 IN ('BG1','FOX1','BRB','NBC', 'CNN3' , 'GAM1', 'AI1')

      更新表名 SET COLUMN3 = '-3'
      WHERE COLUMN2 = 'STANDARD' AND column1 NOT IN ('BG1','FOX1','BRB','NBC', 'CNN3' , 'GAM1', 'AI1')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-16
        • 2011-03-20
        • 1970-01-01
        相关资源
        最近更新 更多