-
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
-
Warum nicht direkt ?
delete from datei
where sanr in (select sanr from Datei
where sanr = 2906040)
-
Da frage ich mich ob Datei = Datei ist!
Delete from Datei where sanr = 2906040
wäre hier für mich der normale Weg.
-
Kurz gesagt: Nein geht nicht.
Die CTE kannst du nur in Kombination mit einem Fullselect verwenden.
-
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!
-
Hallo Andreas!
Schade! Habe ich´s mir doch gedacht.
-
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
-
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.
Similar Threads
-
By svit in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 26-08-14, 17:26
-
By mk in forum NEWSboard Programmierung
Antworten: 20
Letzter Beitrag: 16-12-13, 12:11
-
By Willi1 in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 03-05-02, 08:38
-
By KB in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 18-06-01, 07:35
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks