【问题标题】:Update columns based on condition PL/SQL setting them as NULL根据条件 PL/SQL 将列设置为 NULL 更新列
【发布时间】:2020-07-22 15:10:38
【问题描述】:

我想根据条件更新列:此表包含 A、B、C、D、E 列。

这些具有值的列将被更新为 null。我不想触摸没有任何值的列

...

UPDATE
    Table
SET 
  A = CASE WHEN A!=NULL THEN A=NULL
  B= CASE WHEN B!=NULL THEN B=NULL 
  C= CASE WHEN C!=NULL THEN C='U'
  D= CASE WHEN D!=NULL THEN D=NULL ELSE END,
WHERE
    where condition;

...

PS:: 列值不一样。

【问题讨论】:

    标签: if-statement plsql null sql-update case


    【解决方案1】:

    您的查询几乎接近了。下面应该可以工作,

      update test_Data 
         set  A = CASE WHEN A is not NULL THEN NULL END,
           B = CASE WHEN B is not NULL THEN NULL END ,
           C = CASE WHEN C is not  NULL THEN NULL END,
           D = CASE WHEN D is not   NULL THEN NULL END,
           E = CASE WHEN E = 'abc' THEN 'QWE' ELSE E END
         where (A is not NULL or B is not NULL or C is not NULL or D is not null or E is not null)
    

    更新:

    如果任何列具有 NOT NULL 约束,则必须将列更改为 NULL。

    alter table test_Data modify E null;
    

    有关示例的演示,请参阅 DB fiddle 链接 - https://dbfiddle.uk/?rdbms=oracle_18&fiddle=7f8bfc2f5edda71a9eb5af5ccb2065de

    【讨论】:

    • 你需要牢牢记住的事情:NULL IS NULL。它基本上引入了 3 路逻辑,其中逻辑结果可以是 True、False 或 Null。所以 A=Null 的结果返回 Null,A!=Null 也是如此,并且(也许看起来更奇怪)Null=Null 的结果不是真/假,它是 Null。同样,Null !=Null 也是 Null。牢牢扎根这个想法 Null is Null。 (当然有一些例外,但它们是不寻常的情况)。你不会有像这里这样的麻烦。
    • @VN'Corner 感谢您的更新。但是还有另一列说 E,它可以接受用户定义的值,比如“X”、“Y”和“Z”。因此,当我使用此查询时,我收到一条错误消息,提示无法将“E”更新为 NULL。请建议如何处理这部分。
    • 似乎列 E 具有 NOT NULL 约束,因此通过列定义本身,您无法在任何数据库中将列更新为 NULL。必须更改表以将 E 列修改为 NULL。请参阅答案中更新的 dbfiddle 链接。
    • VN'sCorner 是的,我不想让它为空。我希望它具有一些价值,比如“QWE”。因此,如果它有任何值说“ABC”,则应将其更改为“QWE”。但它不应该使其为空
    • 修改查询,就像修改case表达式一样简单。
    猜你喜欢
    • 2015-04-26
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多