Beispiel-Verschiedene Feldnamen
Es ist nicht erforderlich, dass die entsprechenden Spalten in jeder SELECT-Anweisung denselben Namen haben, sie müssen jedoch dieselben sein entsprechende Datentypen.
Wenn Sie zwischen den SELECT-Anweisungen nicht dieselben Spaltennamen haben, wird es etwas schwierig, insbesondere wenn Sie die Ergebnisse der Abfrage mithilfe der ORDER BY-Klausel bestellen möchten.
Schauen wir uns an, wie der UNION ALL-Operator mit unterschiedlichen Spaltennamen verwendet und die Abfrageergebnisse sortiert werden.,
Zum Beispiel:
SELECT supplier_id, supplier_nameFROM suppliersWHERE supplier_id > 2000UNION ALLSELECT company_id, company_nameFROM companiesWHERE company_id > 1000ORDER BY 1;
In diesem SQL UNION ALL-Beispiel ist es vorteilhafter, auf die Spalten in der ORDER BY-Klausel anhand ihrer Position in der Ergebnismenge zu verweisen, da sich die Spaltennamen zwischen den beiden SELECT-Anweisungen unterscheiden. In diesem Beispiel haben wir die Ergebnisse nach supplier_id / company_id in aufsteigender Reihenfolge sortiert, wie durch die ORDER BY 1
. Die Felder supplier_id / company_id befinden sich an Position 1 in der Ergebnismenge.
Lassen Sie uns nun dieses Beispiel mit Daten weiter untersuchen.,ergebnisse:
supplier_id | supplier_name |
---|---|
3000 | 3000 |
3000 | Apple |
4000 | Samsung |
7000 | Sony |
8000 | IBM |
Zuerst beachten Sie, dass der Datensatz mit supplier_id von 3000 zweimal in der Ergebnismenge angezeigt wird, da die UNION ALL Abfrage alle Zeilen zurückgibt und keine Duplikate entfernt.,
Beachten Sie zweitens, dass die Spaltenüberschriften in der Ergebnismenge supplier_id und supplier_name heißen. Dies liegt daran, dass dies die Spaltennamen waren, die in der ersten SELECT Anweisung in der UNION ALL verwendet wurden.
Wenn Sie es gewollt hätten,hätten Sie die Spalten wie folgt mit einem Alias versehen können:
SELECT supplier_id AS ID_Value, supplier_name AS Name_ValueFROM suppliersWHERE supplier_id > 2000UNION ALLSELECT company_id AS ID_Value, company_name AS Name_ValueFROM companiesWHERE company_id > 1000ORDER BY 1;
Nun werden die Spaltenüberschriften im Ergebnis als ID_Value für die erste Spalte und Name_Value für die zweite Spalte mit einem Alias versehen.,
ID_Value | Name_Value |
---|---|
3000 | Apple |
3000 | Apple |
4000 | Samsung |
7000 | Sony |
8000 | IBM |
Leave a Reply