Detta kan vara radikalt enklare :
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
-
Din dubblettfråga har alla kolumner. Inget behov av att
JOINtill basbordet igen. -
Använd Postgres-tillägget av standard SQL
DISTINCT:DISTINCT ON: -
Postgres har en ordentlig boolesk typ. Du kan
ORDER BYbooleskt uttryck direkt. Sekvensen ärFALSE(0),TRUE(1),NULL(NULL). Om a är NULL är detta uttryckFALSEoch sorterar först:(a IS NOT NULL). Resten sorteras efterid. Voilá. -
Val av
IDsker automatiskt. Enligt din beskrivning vill du ha ID för raden som väljs i denna fråga. Inget mer att göra. -
Du kan förmodligen integrera detta i din dubblettfråga direkt.