2016-11-23 41 views
5

如何在SQL UPDATE CASES中使用多個條件?在MYSQL中使用多個條件

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 

我想設置欄3 = 1,其中第1列落在以下任何名稱 (BG1,FOX1,BRB,NBC,CNN3,GAM1,AI1),並且當COLUMN2 = STANDARD

和還設置欄3 = -2,其中在以下名稱((BG1,FOX1,BRB,NBC,CNN3,GAM1,AI1),並且其中列2 =標準。

COLUMN1心不是我寫這些

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

它沒有工作。有什麼建議?

+0

你想更新哪個字段? –

+0

然後查看['IN'運算符](http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_in)。或者把括號放在正確的位置,考慮到['AND'具有比'OR'更高的優先級](http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html) ,如許多/大多數(全部)其他語言。 – axiac

回答

0

讓我們看看這一個第一:

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進行比較而不使用brakcets,則它幾乎總是會評估爲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') 
0

你想用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' ; 
0

UP DATE表名SET欄3 = '1'
WHERE COLUMN2 = '標準的' 和列1 IN( 'BG1', 'FOX1', 'BRB', 'NBC', 'CNN3', 'GAM1', 'AI1')

UPDATE TableName SET COLUMN3 ='-3'
WHERE COLUMN2 ='STANDARD'AND column1 NOT IN('BG1','FOX1','BRB','NBC','CNN3','GAM1','AI1 ')