Announcement

Collapse
No announcement yet.

syntax error near "...", expected identifier OR floatliteral OR ....

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • syntax error near "...", expected identifier OR floatliteral OR ....

    Hallo zusammen,

    auf dem Schema, welches ihr im Anhang findet, habe ich folgende Anfrage erstellt: Finden Sie alle Studenten, die Kant direkt oder indirekt kennen. Ein Student kennt Kant direkt, wenn er eine seiner Vorlesungen besucht. Ein Student kennt Kant indirekt, wenn er eine Vorlesung besucht, die auch ein anderer Student hört, der Kant kennt (direkt oder indirekt).



    Mit diesem Code:

    Code:
    WITH RECURSIVE kenntKant (vorlnr, matrnr) as(
    
    SELECT distinct v.vorlnr, distinct s.matrnr
    
    from studenten s, hoeren h, vorlesungen v, professoren p
    
    WHERE s.matrnr=h.matrnr
    
    AND professoren.name='Kant'
    
    AND p.persnr=v.gelesenVon
    
    AND v.vorlrnr=h.vorlnr
    
    UNION
    
    SELECT distinct h1.vorlnr, distinct s.matrnr,
    
    FROM kenntKant k, studenten s, hoeren h1, hoeren h2
    
    WHERE s.matrnr=h1.matrnr
    
    AND h1.vorlnr=h2.vorlnr
    
    AND h2.matrnr=k.matrnr
    
    )
    
    
    
    SELECT distinct k.matrnr, s.name
    
    from kenntKant k, studenten s
    
    WHERE k.matrnr=s.matrnr;

    Dabei bekomme ich bei folgender DB2 Datenbankschnittstelle: http://hyper-db.com/interface.html

    Folgenden Fehler: syntax error near "...distinct h1.vorlnr, *ERROR* distinct s.matrnr, ...", expected identifier OR floatliteral OR stringliteral OR bitliteral OR hexbitliteral OR OR intliteral OR '?'.

    Woran könnte dies liegen? Vielen Dank für Eure Hilfe!
    Das verwendete Schema für diese Anfrage

  • #2
    Auf dem Bild ist absolut nichts zu erkennen.

    Hinter
    ...distinct s.matrnr,
    ist ein Komma zuviel

    Aus welchem Grund wird hoeren zweimal eingebunden?
    ...AND h1.matrnr=k.matrnr
    Christian

    Comment


    • #3
      Danke für deine Antwort. Das Komma war tatsächlich zu viel, das System zeigt mir aber noch weiterhin einen Fehler an bei der zweiten Zeile (SELECT distinct v.vorlnr, distinct s.matrnr), der Fehler scheint also dort zu sein.

      Ich habe hoeren zweimal eingebunden, da ich mit hoeren h2 die Vorlesungen ermittele, die von Studenten aus dem vorderen Teil der Anfrage gehört werden und mit h1 die Vorlesungen, die von Studenten gehört werden, die Studenten aus Vorlesungen aus h2 hören. Die Studenten aus h1 sind also alle, die Kant nur indirekt kennen.
      Attached Files

      Comment


      • #4
        Das Bild ist noch nicht größer/lesbarer. Solche Informationen zeigt man eigentlich per DDL Script.
        Ich habe keine Db2 Referenz hier, aber ich würde mal die Distinct weglassen. Weiter: Beispiele von DB2 zeigen ein "union all" statt bloß"union". Das leuchtet mir zwar nicht ein, aber wäre einen Versuch wert.

        Ist das Statement oben im ersten Post das originale?

        Comment


        • #5
          Distinct gehört definitiv nicht an jedes Feld. Das bezieht sich auf die gesamte Select-Liste und muss nur einmal nach dem Select genannt werden.

          Edit:

          weitere syntaxfehler die ich sehe
          - Die 2.te Select Liste endet in einem Komma
          - vorlrnr ist vermutlich falsch geschrieben, vorlnr?
          - du benutzt an einer Stelle den Tabellenname 'Professoren' obwohl du einen Alias für die Tabelle vergeben hast



          Zuletzt editiert von Ralf Jansen; 28.01.2019, 18:14.

          Comment

          Working...
          X