如何在'in'子句中设置字段?

时间:2014-09-04 14:33:44

标签: sql oracle

我想做

update my_table set bool_column = id in (1,5,8);

因此3行将成为真,其他行则为假。但是oracle说:SQL command not properly ended 我怎么能实现这个目标呢?

2 个答案:

答案 0 :(得分:2)

您可以使用case声明:

update my_table
set    bool_column =
       case
       when id in (1,5,8)
       then 1
       else 0
       end
where ...

请注意,Oracle没有布尔数据类型,因此您可能正在使用numberchar

答案 1 :(得分:2)

更新语句需要很少的参数:

  1. 您将要修改的表(在本例中为my_table)
  2. 您要修改的列(在本例中为bool_column)
  3. 将被评估以匹配列类型的表达式(这里是我们遇到问题的地方)
  4. 过滤条件以限制更新行数(在本例中为空)
  5. 我列出了所有这些内容,因为不太清楚bool_column的类型是什么,以及是否要更新所有行或只是3。

    oracle中没有布尔列,因此无法将表达式id in (1,5,8)转换为任何已知的数据类型。 Oracle不期望bool_column右侧的布尔表达式。

    你的bool_column数据类型是number或varchar / char。所以,而不是真/假,你有1/0,' Y' N' N'或类似的东西。 我认为你有' /' N' N' N' N'

    然后你的陈述可能如下:

    update my_table set
    bool_column = case when id in (1,5,8) then 'Y' else 'N' end
    

    另一种选择是只设置1,5,8的行,并将其余的行留空(假设为假):

    update my_table set
    bool_column = 'Y'
    where id in (1,5,8)
    

    但是对于这种方法,你需要确保以空/假bool_column开头。