Wenn Sie Vereinigung zwei Datensätze ist, gibt es keine implizite Ordnung ist, können Sie die Ergebnisse in beliebiger Reihenfolge erhalten.
Die erhalten eine bestimmte Reihenfolge Sie müssen verwenden ORDER BY
.
Um ORDER BY
zu verwenden, müssen Sie Felder haben, um diese Reihenfolge zu tun.
In Ihrem Fall würde der Pseudo-Code sein ...
- ORDER BY [dept_id], [depts-then-employees], [dept_name]
Der mittlere dieser drei ist etwas, das Sie erstellen wollen müssen.
Eine Möglichkeit, das zu tun, ist wie folgt.
note: Nur weil Sie ein Feld haben, indem zu bestellen, bedeutet nicht, dass Sie sie auswählen müssen.
SELECT
dept_id,
dept_name
FROM
(
SELECT
d.dept_id,
d.dept_name,
0 AS entity_type_ordinal
FROM
department d
UNION ALL
SELECT
d.dept_id,
e.employee_name,
1 AS entity_type_ordinal
FROM
department d
INNER JOIN
employee e
ON e.dept_id = d.dept_id
)
dept_and_emp
ORDER BY
dept_id,
entity_type_ordinal,
dept_name
Warum Union-all? Dies ist nur ausgewählte Abfrage –
entweder dies ist eine sehr einfache Abfrage und Sie sollten nur ein Tutorial lesen, oder es ist komplizierter, dass es scheint, und Sie sollten Ihr Datenbankschema beschreiben und was Sie als Abfrage versucht, wenn Sie Hilfe benötigen. – polku
Die kurze Antwort ist "nicht". Sie möchten, dass die Spalte "dept_name" sowohl den Abteilungsnamen als auch die Nachnamen der Mitarbeiter enthält? Das ist ein grundlegend gebrochenes Design. Sie sollten mindestens eine andere Spalte namens "type" haben, die erklärt, was diese Zeile beschreibt (eine Abteilung oder ein Mitarbeiter). Aber noch bessere Abteilungsnamen sollten sich in einer anderen Spalte als die Namen der Mitarbeiter befinden. Wenn dies über das Formatieren der Ergebnisse für die Anzeige ist, formatieren Sie sie in Ihrer Anwendung ... – MatBailie