Announcement

Collapse
No announcement yet.

Abfrage Master Detail

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

  • Abfrage Master Detail

    Hallo zusammen,

    ich bin SQL noch nicht sehr vertraut und habe ein Problem mit einer Abfrage (Zu dem Problem habe ich mich schon mehrere Foren durchsucht).
    Ich habe 2 Tabellen ma und maq.
    In ma (Master) steht u.a. die ID, der Name, Vname,..., Date1, Date2 (zwei Datumswerte).
    In maq (Detail) steht u.a. die ID, MAID (die ID zur Mastertabelle),..., QVerf (ein Qualifikationsverfahren) und QBis (Ablaufdatum für QVerf).

    Ich möchte einen Abfrage erstellen, die mir alle Name auflistet, bei denen Date1, Date2 oder QBis in einem vorgegebenen Intervall (z.B. in nächsten Monat oder Jahr) liegen.
    Beispiel:
    MA Date1 Date2 QVerf QBis
    name1 10.03.2014
    name2 15.03.2014
    name3 05.03.2014 V1 28.03.2014
    name4 V3 16.03.2014

    Ich habe das schon mit Unterabfrage versucht zu lösen, bekomme aber immer auch leere Datensätze mitgeliefert.

    Hier meine Abfrage:
    SELECT ma.name, ma.vname, ma.Date1, ma.Date2, maq.MAID, maq.QVerf, maq.QStBis
    FROM maq,ma
    WHERE (41640 <= maq.QBis AND maq.QBis <= 42004)
    OR((maq.MAID = ANY(
    SELECT ma.ID
    FROM ma
    WHERE ((41640 <= Date1 AND Date2 <= 42004)
    OR (41640 <= Date2 AND Date2 <= 42004)))))
    ORDER BY Name,VName,Date1,Date2;

    Kann mir jemand helfen?
    Danke

  • #2
    Hallo,

    also ich würde zuerst einen sauberen JOIN bilden und dann die Bedingung formulieren:
    [highlight=sql]
    SELECT ma.name, ma.vname, ma.Date1, ma.Date2, maq.MAID, maq.QVerf, maq.QStBis
    FROM ma
    inner join maq on maq.MAID = ma.ID
    WHERE maq.QBis between 41640 AND 42004
    or ma.Date1 between 41640 AND 42004
    or ma.Date2 between 41640 AND 42004
    [/highlight]

    Und zukünftig bitte beachten: Formatierung von SQL in Beiträgen

    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
      Hallo Falk,
      danke für die Antwort.
      An die Formatierungsregeln werde ich mich halten.
      Das habe ich auch schon probiert, aber dann zeigt die Ergebnismenge Namen aus der Masterteabelle mehrfach an und auch Werte in QBis mit Null.

      Gruß Frank

      Comment


      • #4
        Hallo,
        Originally posted by rufus-lw View Post
        ...aber dann zeigt die Ergebnismenge Namen aus der Masterteabelle mehrfach an und auch Werte in QBis mit Null.
        Von der zusätzlichen Bedingung - das QBis nicht NULL sein darf - war bisher noch nicht die Rede. Aber das lässt sich einfach mit einer zusätzlichen Where-Bedingung lösen.
        Für das Zusammenfassen gleicher Datensätze kann man einfach das Schlüsselwort DISTINCT verwenden.
        [highlight=sql]
        SELECT DISTINCT ma.name, ma.vname, ma.Date1, ma.Date2, maq.MAID, maq.QVerf, maq.QStBis
        FROM ma
        INNER JOIN maq ON maq.MAID = ma.ID
        WHERE maq.QBis IS NOT NULL AND
        AND (maq.QBis BETWEEN 41640 AND 42004
        OR ma.Date1 BETWEEN 41640 AND 42004
        OR ma.Date2 BETWEEN 41640 AND 42004)
        [/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


        • #5
          Hallo Falk,

          ja das war es .

          Dank für deine Hilfe.

          Gruß

          Frank

          Comment

          Working...
          X