Dit kan radicaal eenvoudiger :
SELECT DISTINCT ON (b, c, e, f)
b, c, e, f, id -- add more columns freely
FROM (<duplicate query here>) sub
ORDER BY b, c, e, f, (a IS NOT NULL), id
-
Uw dubbele zoekopdracht heeft alle kolommen. Het is niet nodig om
JOIN
weer naar de basistafel. -
Gebruik de Postgres-extensie van de standaard SQL
DISTINCT
:DISTINCT ON
: -
Postgres heeft een correct booleaans type. U kunt
ORDER BY
booleaanse expressie direct. De volgorde isFALSE
(0),TRUE
(1),NULL
(NUL). Als a NULL is, is deze uitdrukkingFALSE
en sorteert eerst:(a IS NOT NULL)
. De rest is gerangschikt opid
. Voilá. -
Selectie van
ID
gebeurt automatisch. Volgens uw beschrijving wilt u de ID van de rij die in deze zoekopdracht is geselecteerd. Niets meer te doen. -
U kunt dit waarschijnlijk rechtstreeks in uw dubbele zoekopdracht integreren.