laster
Goto Top

Rekursive SQL Abfrage funktioniert nicht

Hallo,

habe eine MariaDB Version 10.1.44 auf Ubuntu 18.04

Folgendes möchte ich erreichen:

In einer Tabelle ad_gruppe_membergruppe mit 2 Spalten stehen Gruppen (Feld gruppe_cn) und MemberGruppen (Feld membergruppe_cn).
gruppe_cn | membergruppe_cn
----------+-----------------
Gruppe_1  | Gruppe_33
Gruppe_1  | Gruppe_4
Gruppe_2  | Gruppe_1
Gruppe_4  | Gruppe_99
...

nun möchte ich herausfinden, in welchen Gruppen die Gruppe_99 Mitglied ist.
Ergebnis wäre: Gruppe_99 in Gruppe_4 in Gruppe_1 in Gruppe_2

Mein erster Versuch:
WITH cte AS (
  SELECT a.gruppe_cn, a.membergruppe_cn FROM ad_gruppe_membergruppe a
  UNION ALL
  SELECT cte.gruppe_cn, b.membergruppe_cn FROM cte 
    JOIN ad_gruppe_membergruppe b ON cte.membergruppe_cn = b.gruppe_cn
)
SELECT * FROM cte WHERE membergruppe_cn =  'Gruppe_4'  

Ergebnis ist eine Fehlermeldung 'Error in SQL Syntax, check the ... right syntax to use near 'cte AS (SELECT a.gruppe_cn, a.membergruppe_cn FROM ad_gruppe_membergruppe a' at line 1.

Also hab ich erst einmal eine einfache Abfrage erstellt (wie in https://mariadb.com/kb/en/with/ beschrieben):
WITH gruppe_1 AS ( select * from ad_gruppe_membergruppe where gruppe_cn = 'Gruppe_4')  
  select * from gruppe_1;
Fehlermeldung: wie oben, ... right syntax to use near ' gesamte Zeile 1 '

Bin ratlos. Kann jemand helfen?

vG
LS

Content-ID: 563735

Url: https://administrator.de/forum/rekursive-sql-abfrage-funktioniert-nicht-563735.html

Ausgedruckt am: 25.12.2024 um 01:12 Uhr

akretschmer
akretschmer 08.04.2020 um 11:43:29 Uhr
Goto Top
WITH RECURSIVE xxx

test=*# select * from ad_gruppe_membergruppe ;
 gruppe_cn | membergruppe_cn 
-----------+-----------------
 gruppe_1  | gruppe_33
 gruppe_1  | gruppe_4
 gruppe_2  | gruppe_1
 gruppe_4  | gruppe_99
(4 rows)

test=*# WITH recursive  cte AS (
  SELECT a.gruppe_cn, a.membergruppe_cn FROM ad_gruppe_membergruppe a
  UNION ALL
  SELECT cte.gruppe_cn, b.membergruppe_cn FROM cte 
    JOIN ad_gruppe_membergruppe b ON cte.membergruppe_cn = b.gruppe_cn
)
SELECT * FROM cte WHERE membergruppe_cn =  'gruppe_4';  
 gruppe_cn | membergruppe_cn 
-----------+-----------------
 gruppe_1  | gruppe_4
 gruppe_2  | gruppe_4
(2 rows)

test=*# 
laster
laster 08.04.2020 um 12:56:34 Uhr
Goto Top
Hallo akretschmer,

will nicht. Fehlermeldung (in myPHPAdmin):
Statische Analyse:

1 Fehler wurden während der Analyse gefunden.

    Unerkannte Statement-Typ. (near "WITH" at position 0)  

SQL-Befehl: Dokumentation

WITH cte AS ( SELECT a.gruppe_cn, a.membergruppe_cn FROM ad_gruppe_membergruppe a UNION ALL SELECT cte.gruppe_cn, b.membergruppe_cn FROM cte JOIN ad_gruppe_membergruppe b ON cte.membergruppe_cn = b.gruppe_cn ) SELECT * FROM cte WHERE membergruppe_cn like '1111_%'  

MySQL meldet: Dokumentation
#1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'cte AS ( 
  SELECT a.gruppe_cn, a.membergruppe_cn FROM ad_gruppe_membergruppe a
' in Zeile 1  

wie soll denn der korrekte Syntax sein ?

vG
LS
akretschmer
akretschmer 08.04.2020 um 12:58:34 Uhr
Goto Top
Lies. Meinen. Beitrag.
laster
laster 08.04.2020 um 13:12:59 Uhr
Goto Top
Hallo,

werde leider aus Deinem Beitrag nicht schlau:

Zeile 1 - 8: die Ausgabe der Tabelle (mit meinen Beispieldaten) - OK
Zeile 10 - 16: entspricht meinem ersten Versuch, bis auf "WITH recursive ..."
Zeile 17 - 21: bei Dir funktioniert es.

Bei mir nicht, darum versuche ich mit Deiner Hilfe mein Problem zu finden.

vG
LS
akretschmer
akretschmer 08.04.2020 um 13:39:58 Uhr
Goto Top
Nun, dann wird das wohl die Simulation einer Datenbank, die Du verwendest, nicht können.

Ich verwende PostgreSQL.
laster
laster 08.04.2020 um 13:44:29 Uhr
Goto Top
Hallo,
das habe ich gleich am Anfang geschrieben: MariaDB Version 10.1.44
Gruß
LS
akretschmer
akretschmer 08.04.2020 um 13:51:12 Uhr
Goto Top
Sicher, aber ich weiß nicht, was all die Inkarnationen von MySQL alles so nicht können, die Liste ist schlicht zu lang.