Zwei Selects verbinden ohne UNION
Mario
- datenbank
0 Der Oberförster0 mario0 Der Oberförster0 Mario0 Der Oberförster0 Mario0 Der Oberförster0 mario
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
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
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
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
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.
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
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
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
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