Database 为什么更新没有看到子查询的结果?[甲骨文]
此查询更新0行后:Database 为什么更新没有看到子查询的结果?[甲骨文],database,oracle,Database,Oracle,此查询更新0行后: UPDATE F_ANSWER fa SET fa.STATUS_ID = 5 WHERE fa.ANSWER_ID IN (SELECT FA1.ANSWER_ID FROM F_ANSWER FA1 WHERE FA1.ANSWER_ID = (SELECT ANSWER_ID F
UPDATE F_ANSWER fa
SET fa.STATUS_ID = 5
WHERE fa.ANSWER_ID IN (SELECT FA1.ANSWER_ID
FROM F_ANSWER FA1
WHERE FA1.ANSWER_ID = (SELECT ANSWER_ID
FROM F_ANSWER FA2
WHERE FA2.QUERY_ID = FA1.QUERY_ID
ORDER BY ANSWER_ID DESC
FETCH FIRST ROW ONLY)
);
但单独选择返回的2行ID为:
SELECT FA1.ANSWER_ID
FROM F_ANSWER FA1
WHERE FA1.ANSWER_ID = (SELECT ANSWER_ID FROM F_ANSWER FA2
为什么呢
没有从子查询到查询的链接的简化子查询工作正常:
UPDATE F_ANSWER fa
SET fa.STATUS_ID = 5
WHERE fa.ANSWER_ID IN (SELECT FA1.ANSWER_ID
FROM F_ANSWER FA1
WHERE FA1.ANSWER_ID = (SELECT ANSWER_ID
FROM F_ANSWER FA2
ORDER BY ANSWER_ID DESC
FETCH FIRST ROW ONLY)
);
我可以通过两个查询来解决我的问题-1个用于选择必要的ID,2个用于更新
但有意思的是,为什么update无法看到具有这种结构的子查询的结果。您编写了两个不同的update查询选项:(1)一个使用相关子查询编写,另一个(2)仅使用子查询编写 我相信,您的数据是upd查询(1)中的谓词 切断数据
您的UPD查询可以更轻松地重写。请解释!
WHERE FA1.ANSWER_ID = (SELECT ANSWER_ID
FROM F_ANSWER FA2
WHERE FA2.QUERY_ID =
FA1.QUERY_ID
ORDER BY ANSWER_ID DESC
FETCH FIRST ROW ONLY)
UPDATE F_ANSWER fa
SET fa.STATUS_ID = 5
WHERE fa.ANSWER_ID IN (SELECT FA1.ANSWER_ID
FROM F_ANSWER FA1
WHERE FA1.ANSWER_ID = (SELECT ANSWER_ID
FROM F_ANSWER FA2
WHERE FA2.QUERY_ID =
FA1.QUERY_ID
ORDER BY ANSWER_ID DESC
FETCH FIRST ROW ONLY)
);
UPDATE F_ANSWER fa
SET fa.STATUS_ID = 5
WHERE fa.ANSWER_ID IN (SELECT FA1.ANSWER_ID
FROM F_ANSWER FA1
WHERE FA1.ANSWER_ID = (SELECT ANSWER_ID
FROM F_ANSWER FA2
ORDER BY ANSWER_ID DESC
FETCH FIRST ROW ONLY)
);