Ich benutze Postgres 9.6. Meine Datenbank enthält Präsentationen, die zu Benutzern gehören. Jede Präsentation hat viele Folien. Jede Folie kann optional ein Hintergrundbild haben.Postgres: JOIN mit dem ersten Nicht-Null-Wert, der übereinstimmt?
Table "public.presentation"
id │ integer
user_id │ integer
Table "public.slide"
id | integer
presentation_id | integer (foreign key)
index | integer
Table "public.background"
slide_id . | integer (foreign key)
image_id │ integer
Ich möchte die Liste der Präsentationen für einen bestimmten Benutzer abzurufen, und zusammen mit dem Namen und der ID jeder Präsentation, würde ich gerne die ID des Hintergrundbildes von der ersten Folie erhalten, die eine hat Hintergrundbild (oder null, wenn keine seiner Folien ein Hintergrundbild hat). So kann ich neben jeder Präsentation ein Thumbnail präsentieren.
Zur Zeit habe ich eine Abfrage das Hintergrundbild ID der ersten Folie in der Präsentation erhält nur:
SELECT presentation.*, background.image_id
FROM presentation
JOIN -- get the first slide in each presentation
(SELECT presentation_id FROM slide WHERE index=0)
ON slide.presentation_id=presentation.id
LEFT OUTER JOIN -- join this with background (even if null)
background ON background.slide_id=slide.id
WHERE presentation.user_id=100
ORDER BY presentation.id;
Aber ich mag, dies ändern, um den ersten Nicht-Null-Hintergrundbild ID zu erhalten jede Präsentation. Nicht sicher, wie man das macht!
Ich frage mich, ob Postgres first_value
mir irgendwie helfen kann?