Sven Rautenberg: mysql: eine abfrage - mehrere resultsets

Beitrag lesen

Moin!

Ich denke, dieser Wunsch wird sich nicht erfüllen lassen.

danke für deine ausführliche antwort. was mich aber jetzt schon interessiert: geht das denn  generell nicht?

Nein.

Du kannst die Lottozahlen vom letzten Samstag, die Noten deines letzten Zeugnisses und die Anzahl der Löchern in deinen Strüpfen abfragen. Das Ergebnis wird in jedem Einzelfall ein Integer im Bereich 0 bis 49 sein (hoffe ich mal, ich kenne deine Strüpfe natürlich nicht) und sich deswegen mit UNION SELECT auch in EINE Abfrage zwängen lassen - aber mal im Ernst: Hast du in der Literatur (auf gedrucktem Papier) schon mal so eine beknackte Tabelle gesehen in der untereinander Lottozahlen, Noten und Löcherzahlen drinstanden - drei voneinander vollkommen unabhängige Informationen, die nichts miteinander zu tun haben?

Datenbanken haben aber nur mit Daten zu tun, die etwas miteinander zu tun haben. Deswegen kann man in einer einzelnen Abfrage auch nur eine Tabelle erhalten, die alle abgefragten Daten, die etwas miteinander zu tun haben, auflistet.

habe ich die verwendung eines 'brokers' missverstanden? datenbankabfragen müssen sich doch irgendwie optimieren lassen (ausserhalb der db)...?

Wenn man die Abfragen optimieren kann, dann kann man das auch manuell machen - was unter Umständen zeitaufwendiger ist, weil der Mensch eben nicht so schnell rechnen kann, wie ein Computer, aber vom Ergebnis her absolut identisch sein müßte.

Da man aber nicht beliebige, voneinander unabhängige Tabellenabfragen zusammenfassen kann - es scheitert ja schon dann, wenn die einzelnen Abfragen unterschiedliche Anzahlen von Spalten haben - kann auch kein Programm diese Abfragen zusammenfassen.

Die Datenbank selbst optimiert die eingegangenen Abfragen ja auch. Aber nicht, indem sie zusammengefaßt werden (weil das eine Abfrage unnötig komplexer und damit zeitaufwendiger machen würde), sondern indem sie z.B. WHERE-Bedingungen umformt.

Es dürfte in der Tat für eine Datenbank einfacher sein, nacheinander drei voneinander unabhängige Abfragen in drei verschiedenen Tabellen (oder gar Datenbanken) zu beantworten, als mit Krawall diese drei Antworten zusammenzumischen. Das Zusammenmischen dauert mindestens so lange, wie die drei Abfragen zusammenaddiert, aber da die Ausführung der Multiabfrage (wenn sie denn tatsächlich möglich ist) als ein Block ausgeführt werden muß, müssen weitere Anfragen von anderen Prozessen z.B. bis zum Ende dieses ganzen Blocks warten und können nicht mal eben dazwischengeschoben werden.

- Sven Rautenberg