Mario: Zwei Selects verbinden ohne UNION

Hallo,

ich habe folgendes Problem. Ich will die Ergebnisse der beiden folgenden Selects zusammenbringen. Das Ergebnis beider Selects ist optisch gleich. Ich kann Dank MySQL 3.x kein UNION verwenden.
Hat jemand eine Idee?

Vielen Dank, Mario.

SELECT
w.name, t.texte, t.date, o.typ
FROM operator o, text t, ware w
WHERE o.text_ID=t.ID AND o.waren_ID=w.ID
ORDER BY t.date DESC

SELECT
a.name, t.texte, t.date, o.typ
FROM operator o, text t, autor a
WHERE o.text_ID=t.ID AND o.autor_ID=a.ID
ORDER BY t.date DESC

  1. SELECT w.name, t.texte, t.date, a.name FROM operator AS o
    INNER JOIN text AS t  ON o.text_ID = t.ID
    INNER JOIN waren AS w ON o.waren_ID = w.ID
    INNER JOIN autor AS a ON o.autor_ID = a.ID
    ORDER BY t.date DESC

    1. SELECT w.name, t.texte, t.date, a.name FROM operator AS o
      INNER JOIN text AS t  ON o.text_ID = t.ID
      INNER JOIN waren AS w ON o.waren_ID = w.ID
      INNER JOIN autor AS a ON o.autor_ID = a.ID
      ORDER BY t.date DESC

      Hallo Oberförster,

      leider bekomme ich jetzt gar kein Ergebnis mehr.
      Nur wenn ich den "INNER JOIN waren" und "w.name" entferne bzw. den "INNER JOIN autor" und "a.name" bekomme ich die jeweiligen Daten

      Vielleicht hift Dir das weiter, wenn ich Dir die Tabellen zeige:

      Hier die Tabellen:
      Operator: ID, text_ID, waren_ID, autor_ID
      1, 1, NULL, 3
      2, 2, 1, NULL
      3, 3, 2, NULL
      4, 4, NULL, 3
      5, 5, NULL, 4
      Text: ID, texte, date
      1, Text1, Datum1
      2, Text2, Datum1
      3, Text3, Datum1
      4, Text4, Datum1
      5, Text5, Datum1
      Waren: ID, Name
      1, Max
      2, Karl
      Autor: ID, Name
      3, Bernd
      4, Paul

      Ziel:
      NULL, Bernd, Text1, Datum1
      Max, NULL, Text2, Datum2
      Karl, NULL, Text3, Datum3
      NULL, Bernd, Text4, Datum4
      NULL, Paulm, Text5, Datum5

      Viele Grüße, Mario

      1. Wusste nicht das du NULL Marken hast, dann so:

        SELECT w.name, t.texte, t.date, a.name FROM operator AS o
        LEFT OUTER JOIN text AS t  ON o.text_ID = t.ID
        LEFT OUTER JOIN waren AS w ON o.waren_ID = w.ID
        LEFT OUTER JOIN autor AS a ON o.autor_ID = a.ID
        ORDER BY t.date DESC

        1. Fast Perfekt:

          Folgendes passiert die erste Spalte wird generell geNULLt

          Anordnung
          w.name, a.name, t.texte, t.date
          Ergebnis:
          NULL, Bernd, Text1, Datum1
          NULL, NULL,  Text2, Datum2
          NULL, NULL,  Text3, Datum3
          NULL, Bernd, Text4, Datum4
          NULL, Paul,  Text5, Datum5

          Tausche ich w.name und a.name dann passiert folgendes:

          Anordnung
          a.name, w.name, t.texte, t.date
          Ergebnis:
          NULL, NULL, Text1, Datum1
          NULL, Max,  Text2, Datum2
          NULL, Karl, Text3, Datum3
          NULL, NULL, Text4, Datum4
          NULL, NULL, Text5, Datum5

          Mein Ziel ist es aber:

          Ziel:
          NULL, Bernd, Text1, Datum1
          Max,  NULL,  Text2, Datum2
          Karl, NULL,  Text3, Datum3
          NULL, Bernd, Text4, Datum4
          NULL, Paulm, Text5, Datum5

          Trotzdem für alle Deine bisherigen Gedanken ein Dankeschön.

          1. Moin Nochmal!

            Also ich habe das mal nachgestellt und komme mit der Abfrage mit den drei "Left Outer Join"'s genau auf das von dir erwünschte Ergebnis. Allerdings habe ich es nicht mit MySql, sondern MSSQL *duck* getestet.
            Schon merkwürdig...

            Förster

            1. Dann habe ich wohl Pech gehabt. Ansonsten muß ich doch meine Tabellen umstellen.
              Vielleicht hast Du eine Idee. Ich habe zwei Personenpools (ID, Name) die gleich aussehen. Einen Textpool (ID, Text)
              und einen Tabelle die alles zusammenführen soll (ID, PersPool1ID, PersPool2ID, TextID)

              In der Abfrage sollen dann alle Personen aus 1 und alle Personen aus 2 mit den passenden Texten dargestellt werden.

              Viele Grüße, Mario

              Moin Nochmal!

              Also ich habe das mal nachgestellt und komme mit der Abfrage mit den drei "Left Outer Join"'s genau auf das von dir erwünschte Ergebnis. Allerdings habe ich es nicht mit MySql, sondern MSSQL *duck* getestet.
              Schon merkwürdig...

              Förster

              1. Servus!

                Ich würde von vornherein Personen nicht in unterschiedliche Tabellen schreiben. Im Zuge der "Normalisierung" ist sowas auch unüblich.
                Erstelle eine Personentabelle und eine (keine Ahnung) Rollentabelle

                Person: ID, Name, Nachname, Adresse
                Rolle: Rolle(Autor, Leser,...)

                Verbunden wird dann beides über eine weitere Tabelle,
                welche die Personen- und Rollentabelle verbindet(INNER Join der beiden Primary Keys). Darüber legst du dann einen View und greiffst nur noch auf den View zu.

                Förster

                1. Hallo Förster,

                  ich denke mal das Rollenmodell löst mein Problem. Meine Experimente verlaufen bis jetzt Bestens.

                  Vielen Dank für Deine Hilfe,

                  Mario