代码之家  ›  专栏  ›  技术社区  ›  Athafoud

在子查询中的位置-选择works但不更新[关闭]

  •  -1
  • Athafoud  · 技术社区  · 6 年前

    我有关于Oracle的下表

    CREATE TABLE t1(code varchar2(3), flag1 varchar2(30));
    
    INSERT INTO t1(code, flag1) values ('AAA', NULL);    
    INSERT INTO t1(code, flag1) values ('BBB', NULL);
    

    下面的选择按预期工作,结果为1行

    SELECT * 
      FROM t1 
     WHERE code IN (SELECT 'AAA' 
                      FROM DUAL);
    

    但是,下面的Update语句不起作用(它不更新任何行)

    UPDATE t1
       SET flag1 ='T'
     WHERE code IN (SELECT 'AAA' 
                      FROM DUAL);
    

    我正在用SQLFIDLE运行测试。com(Oracle 11g)。

    你知道为什么会这样吗? 我想我错过了一些明显的东西。。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Athafoud    6 年前

    从评论讨论中可以看出,这不是一个与编程相关的问题,因为我不完全了解SQLFIDLE的工作/行为。

    我错误地执行了命令( SELECT -&燃气轮机; UPDATE -&燃气轮机; 选择 ),每个单独的,而不是作为一个批次。这意味着 更新 在随后的 选择

    总之

    SqlFiddle不会持久化数据,每次运行脚本时,它都会显示结果并回滚

    特殊的 谢谢 Nenad Zivkovic WhatsThePoint 帮助我总结 '解决方案'

        2
  •  0
  •   Miracle    6 年前

    是否尝试使用存在?

    UPDATE t1
       SET flag1 ='T'
    WHERE EXISTS (SELECT 1 
                  FROM DUAL WHERE code = 'AAA');