我在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)中运行我的测试。
你知道为什么会这样吗? 我想我在这里遗漏了一些明显的东西..
答案 0 :(得分:2)
从评论讨论中可以看出这不是与编程相关的问题,因为我并不完全了解SQLFiddle如何工作/行为。
我错误地运行了命令(SELECT
- > UPDATE
- > SELECT
),每个命令都由它自己独立而不是批量运行。这意味着我的UPDATE
语句中的更改在后续SELECT
中没有“可见”。
总结
SqlFiddle不会保留数据,每次运行脚本时,它都会显示结果并回滚
特别感谢致Nenad Zivkovic和WhatsThePoint帮助我完成'解决方案'。
答案 1 :(得分:0)
尝试使用exists?
UPDATE t1
SET flag1 ='T'
WHERE EXISTS (SELECT 1
FROM DUAL WHERE code = 'AAA');