Rolf B: sortierung über zwei Tabellen, nur wenn in einer vorhanden

Beitrag lesen

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

--
sumpsi - posui - clusi