sortierung über zwei Tabellen, nur wenn in einer vorhanden
Luise
- datenbank
- mysql
Jetzt habe ich noch ein Sortier Problem.
In einer Tabelle habe ich alle Datensätze. Wenn einer markiert wurde wird dies in einer weitere Tabelle gespeichert.
Ich möchte nun die Ausgabe so steuern, das wenn Datensätez in Table2 gespeichert wurden, erst diese ausgegeben und dann der Rest.
SELECT a.* FROM table1 a
LEFT JOIN table2 AS b ON b.id = a.id
ORDER BY b.id=NULL, b.id, a.id DESC
Ich möchte nun die Ausgabe so steuern, das wenn Datensätez in Table2 gespeichert wurden, erst diese ausgegeben und dann der Rest.
Offen gestanden komme ich mit Deiner Problemdarstellung überhaupt nicht klar, weiß mithin nicht, was Du willst.
Hi,
SELECT a.* FROM table1 a LEFT JOIN table2 AS b ON b.id = a.id ORDER BY b.id=NULL, b.id, a.id DESC
müßte das nicht b.id IS NULL
sein? ein = NULL
liefert doch immer false …
cu,
Andreas a/k/a MudGuard
Hallo MudGuard,
nein, "irgendwas
= NULL" liefert NULL, nicht FALSE. Läuft aber auf's gleiche hinaus, diese Sort-Column ist wirkungslos.
b.id IS NULL
liefert FALSE oder TRUE, das kann man als Sort-Column angeben. Weil FALSE den Wert 0 hat, würden auf diese Weise die Zeilen zuerst angezeigt, für die b.id existiert. So weit, so gut.
Die beiden anderen Sort-Columns bewirken, dass die selektierten Zeilen aufsteigend id angezeigt werden (a.id und b.id sind dann gleich), und die nicht selektierten Zeilen absteigend nach id. Ist das so beabsichtigt?
Das witzige an MySQL ist, dass man im ORDER BY auch einen EXISTS-Ausdruck angeben kann. Allerdings würde man damit nicht mehr diesen Mix von aufsteigender und absteigender ID hinbekommen. Deren Sinn verstehe ich aber ohnehin noch nicht, man sortiert zumeist nach einem fachlichen Attribut (Name, Datum, etc.), nicht nach der Satz-ID.
SELECT a.*
FROM table1 a
ORDER BY EXISTS (SELECT * FROM table2 b WHERE t1.id = t2.id) DESC,
a.id
Es muss EXISTS (...) DESC
sein, damit die Matches mit table2, die zu TRUE führen, nach vorn kommen.
Rolf