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
JOINweer naar de basistafel. -
Gebruik de Postgres-extensie van de standaard SQL
DISTINCT:DISTINCT ON: -
Postgres heeft een correct booleaans type. U kunt
ORDER BYbooleaanse expressie direct. De volgorde isFALSE(0),TRUE(1),NULL(NUL). Als a NULL is, is deze uitdrukkingFALSEen sorteert eerst:(a IS NOT NULL). De rest is gerangschikt opid. Voilá. -
Selectie van
IDgebeurt 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.