Oracle DELETE statement with subquery factoring

前端 未结 3 1670
一整个雨季
一整个雨季 2021-01-02 04:25

Trying to do this (works in SQL Server):

WITH X AS (), Y AS (), Z AS ()
DELETE FROM TBL
WHERE TBL.ID IN (SELECT ID FROM Z);

This works in O

相关标签:
3条回答
  • 2021-01-02 04:51

    I got this to work (which I'm sure doesn't work in SQL Server):

    DELETE FROM TBL
    WHERE TBL.ID IN (
        WITH X AS (), Y AS (), Z AS ()
        SELECT ID FROM Z
    );
    
    0 讨论(0)
  • 2021-01-02 04:54

    You cannot use Subquery Factoring/CTE with anything but the SELECT statement. From the documentation:

    You can specify this clause in any top-level SELECT statement and in most types of subqueries.

    You could do this:

    DELETE FROM tbl WHERE tbl.id IN
    (WITH X AS (), Y AS (), Z AS ()
    SELECT id FROM TBL
     WHERE TBL.ID IN (SELECT ID FROM Z));
    
    0 讨论(0)
  • 2021-01-02 05:03

    Well, at a minimum, you need to have all of the aliased queries appear in the FROM statement somehow. I don't know if there are more issues, but that is a must (and I believe that 00928 is the error that happens when you don't).

    0 讨论(0)
提交回复
热议问题