Daten aus 2 Tabellen mit UNION verknüpfen

23 Jan 2012 um 22:56 - MySQL/Datenbank

Fast jede Abfrage in SQL operiert mit der Verknüpfung der Daten. Daten aus den verschiedenen Tabellen werden zusammen verknüpft.

Dabei geht man meistens davon aus, dass die resultierte Tabelle mit Hilfe der gemeinsamen Felder erstellt wird. Man nimmt diese Felder, dann kommen JOINs ins Spiel und Ergebnis ist hier :) Die logische Verbindung zwischen 2 Felder sind vorausgesetzt. Was macht man aber, wenn es um 2 separate, logisch nicht verknüpfte Tabellen geht? In diesem Fall kann man den SQL UNION Operator verwenden.

Beispiel aus der Praxis: 1. Tabelle beinhaltet die Daten für Verkäufer, 2. Tabelle mit Käufer. Wir brauchen die Tabelle mit allen Geschäftspartnern aus Hamburg, also Verkäufer als auch Käufer. Direkte Verknüpfung bringt nichts, weil es keine Verbindung anhand IDs besteht :(

Dann basteln wir 2 getrennte Anfrage für Verkäufer und Käufer:

 SELECT CITY, NAME, SURNAME, DATES, PRICE FROM TKAUFER

 und

 SELECT CITY, NAME, SURNAME, DATES, PRICE FROM TVERKAUFER

UNION Operator verbindet diese 2 Tabellen. Hier müssen wir die Reihenfolge sowie Typen der Felder beachten:

 SELECT CITY, NAME, SURNAME, DATES, PRICE FROM TKAUFER
UNION
SELECT CITY, NAME, SURNAME, DATES, PRICE FROM TVERKAUFER

Wenn einige Felder nur in einer Tabelle vorkommen, dann werden durch den Platzhalter erstetzt:

 SELECT CITY, NOW(), 0.0 FROM TKAUFER - NOW() und 0.0 ersetzen die fehlenden Werte 

Mit dieser Technik kann man sehr viele Tabellen kombinieren. Die Ergebnisse kann man noch mal auswerten:

 SELECT COUNT(*), A.CITY FROM (
SELECT CITY, NAME, SURNAME, DATES, PRICE FROM TKAUFER
UNION
SELECT CITY, NAME, SURNAME, DATES, PRICE FROM TVERKAUFER

) A GROUP BY A.CITY

Letzte Abfrage bringt uns die häufigsten Städte, in der man kauft und verkauft. Solche Abfragen sind zwar lukrativ und bringen sehr viele Vorteile, aber können sehr "schwer" für Server sein. Jede Abfrage beinhatet quasi mehrere Abfragen gleichzeitig.

Kommentare

Bisland keine Kommentare - sei der erste!


© 2008 Anton Pavlushko - Webentwicklung, Internetmarketing und Suchmaschinenoptimierung (SEO)

0.0061161518096924 sec