Database 为什么更新没有看到子查询的结果?[甲骨文]

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

此查询更新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 
                                              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)中的谓词

切断数据

  • 在主更新查询中,此块是相关子查询
  • 在这个查询中,您使用的是一个子查询,而不按查询ID进行关联( .... 其中FA2.QUERY\u ID=FA1.QUERY\u ID .... ):
  • 您可以提供数据示例并制定任务。
    您的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)
        );