如何在SQL更新案例中使用多个条件?
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 =标准。
我写了这些
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')
这不管用。有什么建议吗?
发布于 2016-11-23 02:21:12
让我们先来看看这个:
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进行比较,则几乎总是将其计算为真,因为在列中有许多匹配值。为自己检查
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')
发布于 2016-11-23 04:22:59
你想要使用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' ;
发布于 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”)
https://stackoverflow.com/questions/40754094
复制相似问题