【问题标题】:Deleting rows from a join of two tables and rownum condition in Oracle DB从 Oracle DB 中的两个表和 rownum 条件的连接中删除行
【发布时间】:2019-11-06 19:20:03
【问题描述】:

使用 Oracle DB 学习 PL/SQL 并尝试完成以下任务:

我有两张桌子 a 和 b。我在 id 上加入他们,添加几个条件,然后尝试仅从表 a 中删除结果行,批量大小为 1000。基本查询如下所示:

DELETE (SELECT * 
        FROM SCHEMA.TABLEA a 
             INNER JOIN SCHEMA.TABLEB b ON a.b_id = b.id 
        WHERE par=0 AND ROWNUM <= 1000);

这显然不起作用,因为我正在尝试操作视图:“数据操作操作在此视图上不合法”

如何重写?

【问题讨论】:

    标签: sql database join plsql oracle11g


    【解决方案1】:

    你只能从一个表远程,现在需要做一个连接。如果需要,可以在 where 子句中处理它

    你删除的语句可以是例如

    DELETE from SCHEMA.TABLEA a
    where a.id in (select b.id from SCHEMA.TABLEB b)
    and par=0 AND ROWNUM <= 1000
    
    

    【讨论】:

      【解决方案2】:

      您可以编写简单的查询来检查 TABLEA 中需要删除的行是否存在于 TABLEB 中。

      DELETE
      FROM schema.tablea a
      WHERE par = 0
      AND   EXISTS (SELECT 1 FROM schema.tableb b WHERE a.b_id = b.id)
      AND   rownum <= 1000;
      

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 1970-01-01
        • 2012-06-01
        • 2022-01-19
        • 2019-06-04
        • 1970-01-01
        • 1970-01-01
        • 2013-07-21
        • 1970-01-01
        相关资源
        最近更新 更多