Flownie: SQL Abfrage

Hallo

Ich versuche mal, mein Problem so einfach wie möglich darzustellen. Ich habe als erstes eine Tabelle t_documents, mit den Feldern ID, directoryID und documentName. Also etwa so:
ID    directoryID     documentName
1     1               Name 1

Also dies ist ein Dokument, das im Ordner mit der ID 1 liegt.

Nun können von diesem Dokument aber Referenzen auf andere Ordner erstellt werden. Dafür habe ich die Tabelle t_referenzen, mit den Feldern ID, documentID, directoryID. Also so:
ID    documentID     directoryID
1     1              10
2     1              20

Das Dokument hat also eine Referenz auf die Verzeichnisse 10 und 20.

Nun müsste ich eine Abfrage haben, die die beiden Tabellen verknüpft und mir alle Verzeichnisse bringt, in der das Dokument liegt. Das Ergebniss müsste so aussehen:
documentID     directoryID    documentName
1              1              Name 1
1              10             Name 1
1              20             Name 1

Schwierig zu erklären, kann mir da jemand weiterhelfen?

  1. Hallo Flownie,

    Schwierig zu erklären, kann mir da jemand weiterhelfen?
    [...]

    ich versuche mal mein Glück.

    Ohne jetzt auf den (nicht optimalen) Aufbau Deiner Datenbank einzugehen sollte diese Abfrage das liefern was Du willst ... oder zumindest das was ich glaube aus Deiner Erkläreung heraus zu lesen vermag.

    select
      tr.documentID ,
      tr.directoryID ,
      tr.documentName
    from
      t_documents td
      t_referenzen tr,
    where
      td.documentID = tr.documentID

    Grüße!
    Holger

  2. Hello,

    Nun müsste ich eine Abfrage haben, die die beiden Tabellen verknüpft und mir alle Verzeichnisse bringt, in der das Dokument liegt.

    da kann ich dir nur wärmstens die Artikel im Datenbankbereich von SELFHTML empfehlen, die sich mit Joins befassen.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
    1. Wenn ich die Tabellen mit Join verknüpfe, erscheinen jeweils nur die Verzeichnisse aus t_referenzen.

      Egal wie ich es lösen will, das einzelne Ergebniss (Verzeichnis) aus der Tabelle t_documents erscheint nie, sondern nur die Referenzen.

      1. Hello,

        Egal wie ich es lösen will, das einzelne Ergebniss (Verzeichnis) aus der Tabelle t_documents erscheint nie, sondern nur die Referenzen.

        das stimmt, weil das erstmal Wissen ist, was über den Join hinaus geht. Der Join kann nur die Referenzen auflösen. Wenn du zusätzlich das echte Verzeichnis brauchst musst du folgenden UNION verwenden
        SELECT ... <hier die Abfrage mit JOIN> ...
        UNION
        SELECT id AS documentID, directoryID, documentName FROM t_documents

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"
        1. yo,

          SELECT ... <hier die Abfrage mit JOIN> ...
          UNION
          SELECT id AS documentID, directoryID, documentName FROM t_documents

          ich würde hier wieder UNION ALL bevorzugen....

          Ilja

  3. Ich würde das mal ganz prinzipiell das anders aufbauen.
    _$Spaltenname_ => PRIMARY KEY

    t_documents(_docID_, docName):

    docID   docName
    1       Name1
    2       Name2
    3       Name3

    t_references(_docID_, _dirID_)

    docID   dirID
    1       10
    1       10
    2       10
    3       20

    Deine Abfrage würde dann so lauten:
    SELECT t.docID, t.dirID, d.docName
    FROM t_references r
    INNER JOIN t_documents d ON t.docID = d.docID

    Ich hoffe ich habe deine Aufgabe nicht falsch verstanden

    --
    ie:% fl:| br:^ va:} ls:& fo:| rl:( n4:( ss:| de:] js:| ch:? sh:( mo:| zu:)