我正在尝试更新已经部分填充的表的许多行。AREA_TITLE列有包含状态名的区域名,但不能单独使用,因此使用了%%修饰符。以下是我的mysql查询,它不包含错误(根据Sequel Pro),但实际上也不会更新表:
UPDATE localTable
SET PRIM_STATE =
CASE AREA_TITLE
WHEN '%Alabama%' THEN 'AL'
WHEN '%Alaska%' THEN 'AK'
WHEN '%Arizona%' THEN 'AZ'
WHEN '%Arkansas%' THEN 'AR'
WHEN '%California%' THEN 'CA'
WHEN '%Colorado%' THEN 'CO'
WHEN '%Connecticut%' THEN 'CT'
WHEN '%Delaware%' THEN 'DE'
WHEN '%Florida%' THEN 'FL'
WHEN '%Georgia%' THEN 'GA'
WHEN '%Hawaii%' THEN 'HI'
WHEN '%Iowa%' THEN 'IA'
WHEN '%Idaho%' THEN 'ID'
WHEN '%Illinois%' THEN 'IL'
WHEN '%Indiana%' THEN 'IN'
END
WHERE AREA_TITLE IN ('%Alabama%', '%Alaska%', '%Arizona%', '%Arkansas%', '%California%', '%Colorado%', '%Connecticut%', '%Delaware%', '%Florida%', '%Georgia%', '%Hawaii%', '%Iowa%', '%Idaho%', '%Illinois%', '%Indiana%');
非常感谢您的帮助!
示例数据:AREA_TITLE=“阿拉巴马州东北部非地铁区域”->PRIM_STATE='AL'
AREA_TITLE=“阿肯色州中部非地铁区”->PRIM_STATE='AR'
最佳答案
(我主要使用的是SQL Server,但除非我搞错了,否则这应该仍然适用)
这种格式的CASE
语句将把变量与为每个WHEN
提供的值进行比较。您应该使用CASE
语句的the second form,其中每个WHEN
定义一个条件,并特别使用LIKE
运算符。
对于WHERE
子句也是如此,您实际上是在将表中的值与文本%Alabama%
进行比较。需要LIKE
运算符,您可能需要使用多个OR
而不是IN
运算符。
像这样的:
UPDATE localTable
SET PRIM_STATE =
CASE
WHEN AREA_TITLE LIKE '%Alabama%' THEN 'AL'
WHEN AREA_TITLE LIKE '%Alaska%' THEN 'AK'
WHEN AREA_TITLE LIKE '%Arizona%' THEN 'AZ'
WHEN AREA_TITLE LIKE '%Arkansas%' THEN 'AR'
WHEN AREA_TITLE LIKE '%California%' THEN 'CA'
WHEN AREA_TITLE LIKE '%Colorado%' THEN 'CO'
WHEN AREA_TITLE LIKE '%Connecticut%' THEN 'CT'
WHEN AREA_TITLE LIKE '%Delaware%' THEN 'DE'
WHEN AREA_TITLE LIKE '%Florida%' THEN 'FL'
WHEN AREA_TITLE LIKE '%Georgia%' THEN 'GA'
WHEN AREA_TITLE LIKE '%Hawaii%' THEN 'HI'
WHEN AREA_TITLE LIKE '%Iowa%' THEN 'IA'
WHEN AREA_TITLE LIKE '%Idaho%' THEN 'ID'
WHEN AREA_TITLE LIKE '%Illinois%' THEN 'IL'
WHEN AREA_TITLE LIKE '%Indiana%' THEN 'IN'
END
WHERE AREA_TITLE LIKE '%Alabama%' OR AREA_TITLE LIKE '%Alaska%' OR AREA_TITLE LIKE '%Arizona%' OR AREA_TITLE LIKE '%Arkansas%' OR AREA_TITLE LIKE '%California%' OR AREA_TITLE LIKE '%Colorado%' OR AREA_TITLE LIKE '%Connecticut%' OR AREA_TITLE LIKE '%Delaware%' OR AREA_TITLE LIKE '%Florida%' OR AREA_TITLE LIKE '%Georgia%' OR AREA_TITLE LIKE '%Hawaii%' OR AREA_TITLE LIKE '%Iowa%' OR AREA_TITLE LIKE '%Idaho%' OR AREA_TITLE LIKE '%Illinois%' OR AREA_TITLE LIKE '%Indiana%');
关于mysql - 从第二列的多个值更新一列的多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25537223/