Announcement

Collapse
No announcement yet.

join / subquery Problem

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

  • join / subquery Problem

    Hi,

    ich habe folgendes Problem das mir langsam den Verstand raubt.

    4 Tabellen, die jeweils 1:n über pk/sk normalisiert sind. Die relevanten Daten sind alle in Tabelle1, aber die Sortierung soll in akzeptabler Geschwindigkeit über das Datum der Einträge aus Tabelle4 erfolgen.

    Ich komme einfach nicht weiter und wäre für jede Hilfe dankbar.

  • #2
    Hallo,
    Originally posted by sirm View Post
    ...Ich komme einfach nicht weiter und wäre für jede Hilfe
    dankbar.
    Schön, und wie kann man dir helfen? Wie lautet deine Frage? Wo oder Wer ist dein Problem?

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Originally posted by Falk Prüfer View Post
      Hallo,


      Schön, und wie kann man dir helfen? Wie lautet deine Frage? Wo oder Wer ist dein Problem?

      Gruß Falk

      das problem ist, daß wenn ich das ganze mit joins versuche alle verknüpfungen als ergebnis bekomme. das sind dann 100.000.000.000 zeilen. es sollen aber nur die ca. 1000 zeilen aus tabelle1 sortiert nach dem datum aus tabelle4 rauskommen.

      Comment


      • #4
        Wir haben ja keine Ahnung, wie dein Statement aussieht, aber was passiert, wenn du einfach mal "distinct" verwendest?

        bye,
        Helmut

        Comment


        • #5
          Hallo,
          Originally posted by sirm View Post
          das problem ist, daß wenn ich das ganze mit joins versuche alle verknüpfungen als ergebnis bekomme. das sind dann 100.000.000.000 zeilen. es sollen aber nur die ca. 1000 zeilen aus tabelle1 sortiert nach dem datum aus tabelle4 rauskommen.
          Die Anzahl der Zeilen sieht verdammt nach einem kartesischen Produkt aus.
          Auf der anderen Seite, wenn du nur Daten aus Tab1 und Tab4 benötigst, warum joinst du dann 4 Tabellen?

          Gruss Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            moin!


            Erstmal danke für die bisherigen Ansätze. Ich versuche mal, die Struktur besser zu erklären. Aufgeführt sind nur die wichtigen Spalten der Tabellen.

            Tab1 "project" - primary key: pid
            Tab2 "stage" - primary key: sid, secondary key: pid
            Tab3 "bug" - primary key: bid, secondary key: sid
            Tab4 "note" - primary key: nid, secondary key: bid - date

            Zur Erläuterung: Tab1 ist die Liste aller Projekte, die ausgegeben werden soll. Ein Projekt kann dabei x Stages haben. Jede Stage kann wiederum y Bugs enthalten und jeder Bug kann z Notes besitzen.

            Die Sortierung der Projektliste (Tab1) soll nun nach der jeweils aktuellsten Note (Tab4) erfolgen, die nur über die Keys von Tab2 und Tab3 verknüft sind.

            Mein eher stümperhafter Ansatz war folgender:

            SELECT * FROM project AS t1
            INNER JOIN stage AS t2 ON t1.pid = t2.pid
            INNER JOIN bug AS t3 ON t2.sid = t3.sid
            INNER JOIN (SELECT max(date) AS mdate, note.bid FROM note GROUP BY note.bid) AS t4 ON t3.bid = t4.bid
            ORDER BY t4.mdate DESC


            Ich hoffe ich konnte das Problem jetzt verständlicher erklären und bin immer noch für jede Hilfe dankbar.

            Comment


            • #7
              Hallo,

              als Ansatz siehe: Bei "doppelten" Datensätzen nur einen anzeigen

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                ich habe das problem mittlerweile gelöst. vielleicht hilft die lösung jemandem weiter:

                Code:
                SELECT t1.pid, , t1.projectname, max(t4.date) AS date 
                FROM project AS t1 
                LEFT OUTER JOIN stage AS t2 ON t1.pid = t2.pid 
                LEFT OUTER JOIN bug AS t3 ON t2.sid = t3.sid 
                LEFT OUTER JOIN note AS t4 ON (t3.bid = t4.bid AND isvalid)
                WHERE t1.deleted IS NULL
                GROUP BY t1.id, t1.projectname
                ORDER BY max(coalesce(t4.date, date '1970-01-01')) DESC

                Comment

                Working...
                X