Announcement

Collapse
No announcement yet.

Abfrage über 3 Tabellen, max() für ALLE IMMER null wenn eine leer?

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

  • Abfrage über 3 Tabellen, max() für ALLE IMMER null wenn eine leer?

    Hi!

    Folgendes:
    Ich möchte über 3 Tabellen in einem Feld "globalId" den größten ÜBERHAUPT existierenden Wert ermitteln.

    Da funktioniert auch super wenn ich folgendes mache:
    Code:
    SELECT MAX(taa.globalId) AS gId, MAX(taa2.globalId) as gId2, MAX(taa3.globalId) as gId3 FROM taa, taa2, taa3
    Da bekomme ich dann 3 Werte, welche jeweils den größten der jeweiligen Tabelle darstellen und kann prima den höchsten ermitteln.

    Wie gesagt, funkioniert prima, BIS: Eine der 3 Tabellen KEINEN Eintrag enthält... Dann bekomme ich nur 3mal NULL zurück, womit ich rel. wenig anfangen kann.

    Zum verdeutlichen:
    Obigen query ausgeführt, alle 3 Tabellen enthalten min. einen Eintrag. Ergibt folgendes:

    gId: 98, gId2: 5, gId3: 16

    Gleicher query, aber Tabelle "taa" enthält NICHTS. Ergibt folgendes:

    gId: NULL, gId2: NULL, gId3: NULL

    Jemand ne Idee?

    mfG,
    mandrake

  • #2
    COALESCE (MAX(taa.globalId), 0)

    Comment


    • #3
      Originally posted by mandrake View Post
      ...
      Gleicher query, aber Tabelle "taa" enthält NICHTS. Ergibt folgendes:

      gId: NULL, gId2: NULL, gId3: NULL

      Jemand ne Idee?
      Deine Abfrage enthält keinerlei rel.Beziehung, d.h. du bildest ein kartesisches Produkt über drei Tabellen. Dabei wird jeder DS jeder Tabelle mit jedem DS jeder anderen Tabelle verknüpft. Die Anzahl der resultierenden DS errechnet sich wie folgt: Anzahl_DS_von_Tab1 * Anzahl_DS_von_Tab2 * Anzahl_DS_von_Tab3...
      Damit wird auch dein Problem deutlich! Ist nämlich einer der Faktoren 0, sprich eine Tabelle enthält keine DS, dann ist das gesamte Produkt 0 und deine Ergebnismenge ist Leer. Soviel zur Theorie
      Ich würde das Ganze mit einem UNION lösen.
      Entweder für jede Tabelle einzeln:
      [highlight=sql]
      SELECT MAX(taa.globalId) AS gId
      FROM taa
      union
      SELECT MAX(taa2.globalId) as gId2
      FROM taa2
      union
      SELECT MAX(taa3.globalId) as gId3
      FROM taa3
      [/highlight]
      Oder über alle drei Tabellen:
      [highlight=sql]
      select max(tg.globalId) as gid
      from (
      SELECT taa.globalId AS gId
      FROM taa
      union
      SELECT taa2.globalId as gId2
      FROM taa2
      union
      SELECT taa3.globalId as gId3
      FROM taa3
      ) tg
      [/highlight]

      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

      Working...
      X