Meine Tabelle sieht wie folgt aus:Verwendung mehrerer UNION ALL-Anweisungen in WITH-Klausel
CREATE TABLE gyerek (
gyereke INT,
szulonek INT
);
Ich versuche, mehrere UNION ALL
Aussagen in meiner WITH
Klausel zu verwenden:
WITH testver (x, y) AS (
SELECT gy1.gyereke, gy2.gyereke
FROM gyerek gy1, gyerek gy2
WHERE gy1.szulonek = gy2.szulonek
AND gy1.gyereke <> gy2.gyereke
), rokon (x, y) AS (
SELECT * FROM testver
UNION ALL
(SELECT r1.x, gy1.gyereke
FROM rokon r1, gyerek gy1
WHERE r1.y = gy1.szulonek)
UNION ALL(SELECT gy1.gyereke, r1.y
FROM rokon r1, gyerek gy1
WHERE r1.x = gy1.szulonek)
)
SELECT * FROM rokon;
ich folgende Fehlermeldung erhalten :
ORA-32041: UNION ALL operation in recursive WITH clause must have only two branches
Meine Frage ist: Gibt es eine Möglichkeit, mehrere UNION ALL
Anweisungen zu verwenden? Wenn es nicht gibt, wie kann ich die Vereinheitlichung der letzten zwei SELECT
Aussagen erreichen.
Und was erwarten Sie von dieser Abfrage? Ich glaube, es könnte so viel einfacher geschrieben werden, und wenn es funktioniert, hätte es übrigens doppelte Datensätze zurückgegeben. Ist es das, was du dir gewünscht hast? –
Brauchen Sie wirklich "UNION ALL"? Wählt nicht 'SELECT r1.x, gy1.gyereke FROM rokon r1 beitreten gyerek gy1 ON gy1.szulonek IN (r1.x, r1.y)' ausreichen? –
Eigentlich versuche ich 'Datalog' Regeln in' SQL' umzuschreiben. Ich weiß nicht, ob es einfacher wäre, ich habe vor kurzem angefangen, die Sprache zu lernen, und ich habe mich gefragt, warum ich nicht in der Lage bin, mehrere UNION ALL's zu benutzen. –