使用IN的MySQL条件UPDATE

时间:2010-01-20 05:31:10

标签: mysql sql sql-update

我有一个数据库表,其中包含一个名为 features 的列,用于突出显示页面上的精选内容。目前,我正在使用两个SQL语句来打开/关闭特征行,如下所示:

-- Reset everything to non-featured
UPDATE tbl SET featured = '0'; 

-- Now set the selected rows as featured.
UPDATE tbl SET featured = '1' WHERE id IN (4, 10, 21);  

是否可以将这两者合并为一个陈述?

3 个答案:

答案 0 :(得分:7)

使用:

UPDATE tbl
   SET featured = CASE 
                    WHEN id IN (4, 10, 21) THEN '1'
                    ELSE '0'
                  END;

答案 1 :(得分:4)

使用:

UPDATE tbl SET featured = id IN (4, 10, 21);  

<强> [编辑]

@OMG小马:

有效,你可以利用Mysql中的布尔条件可以直接映射到整数这一事实。

在Postgresql中,你必须这样做,需要将布尔值转换为整数:

update tbl set featured = (id in ('b','d'))::int

答案 2 :(得分:-3)

是的,您可以将这两者合并为一个声明。