在子查询中的哪些 - SELECT工作但不是UPDATE

时间:2018-03-23 08:35:07

标签: sql oracle11g sql-update

我在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);

我在sqlfiddle.com(Oracle 11g)中运行我的测试。

你知道为什么会这样吗? 我想我在这里遗漏了一些明显的东西..

2 个答案:

答案 0 :(得分:2)

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

我错误地运行了命令(SELECT - > UPDATE - > SELECT),每个命令都由它自己独立而不是批量运行。这意味着我的UPDATE语句中的更改在后续SELECT中没有“可见”。

总结

  

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

特别感谢Nenad ZivkovicWhatsThePoint帮助我完成'解决方案'

答案 1 :(得分:0)

尝试使用exists?

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