[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2001
    Beiträge
    93

    SQL-Delete in Verbindung mit Common Table Expressions

    Hallo,

    ist es möglich, einen Delete-Befehl in Verbindung mit einer Common Table Expression zu verwenden oder ist das gar nicht erlaubt? Bei meinem Beispiel bringt das interaktive SQL den Fehler: "Schlüsselwort DELETE nicht erwartet. Gültige Token: ( SELECT VALUES."

    Beispiel:

    with cte as
    (select sanr from Datei
    where sanr = 2906040)

    delete from datei
    where sanr in (select SANR from cte)

    Vielen Dank im Voraus!
    Michi

  2. #2
    Registriert seit
    May 2002
    Beiträge
    1.121
    Warum nicht direkt ?
    delete from datei
    where sanr in (select sanr from Datei
    where sanr = 2906040)

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Da frage ich mich ob Datei = Datei ist!

    Delete from Datei where sanr = 2906040

    wäre hier für mich der normale Weg.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Kurz gesagt: Nein geht nicht.
    Die CTE kannst du nur in Kombination mit einem Fullselect verwenden.

  5. #5
    Registriert seit
    Nov 2001
    Beiträge
    93
    Das Beispiel ist nur ein fiktives Beispiel. Der eigentliche Befehl schaut ein wenig komplexer aus:

    with apc00_one as
    (select pcartn, pckdnr, max(pcsanr) pcsanr
    from smkdift/apc00 b
    where b.pcstat='X'
    group by pcartn, pckdnr
    order by pckdnr, pcartn),
    apc00_two as
    (select * from smkdift/apc00 a
    where pcsanr in (select pcsanr from apc00_one)
    and pckdnr = ' 230964'),
    apc00_three as
    (select a.PCSANR
    from smkdift/apc00 a
    left join apc00_two b on a.pckdnr=b.pckdnr
    and a.pcartn=b.pcartn
    where a.pcstat=' '
    and ((a.pcbekz=2 and b.pcbekz=2) or
    (a.pcbekz=3 and b.pcbekz=3 and a.pcekne=b.pcekne)) )

    delete from smkdift/apc00
    where pcsanr in (select PCSANR from apc00_three)


    Der Befehl mit den CTEs existierte schon in Verbindung mit der Select-Anweisung und ich habe diese als Basis für den Delete-Befehl verwenden wollen. Was aber wie erwähnt anscheinend nicht funktioniert!

  6. #6
    Registriert seit
    Nov 2001
    Beiträge
    93
    Hallo Andreas!

    Schade! Habe ich´s mir doch gedacht.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Vielleicht nochmal für alle:

    Common Table Expressions (CTE) sind Bestandteil des SELECT-Statements und kein Bestandteil der Data-Manipulation-Befehle INSERT/UPDATE oder DELETE.

    Sofern natürlich z.B. ein INSERT auf einem SELECT-Statement beruht können CTEs natürlich in Verbindung mit dem SELECT-Statement verwendet werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Der CTE ist nur eine vereinfachte Schreibweise für Derived Tables (Full-Subselect).
    Anstelle von
    where pcsanr in (select PCSANR from apc00_three)

    kannst du auch

    where pcsanr in (select PCSANR from (select pcartn, pckdnr, max(pcsanr) pcsanr
    from .... ) apc00_three)


    kodieren.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQLRPG Delete im Select
    By svit in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 26-08-14, 17:26
  2. SQL Table etc....
    By mk in forum NEWSboard Programmierung
    Antworten: 20
    Letzter Beitrag: 16-12-13, 12:11
  3. CREATE TABLE
    By Willi1 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-05-02, 08:38
  4. Table QSQPTABL in QSYS2
    By KB in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 18-06-01, 07:35
  5. DATFMT bei CREATE TABLE
    By lorenzen in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 21-03-01, 13:44

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •