Ich hatte Schwierigkeiten, sogar den richtigen Fragetitel zu finden. Ich werde einen Rat nehmen, um es zu bearbeiten.Zeilen nach verbundenen Tabellen in Postgres bestellen
Mein Problem: Ich habe eine app (Jobbörse) mit zwei Modellen: Benutzer, Job. Benutzer kann viele Jobs haben und Jobs können premium
oder free
sein. Jobs können abgelaufen oder aktiv auch sein. Sie sind aktiv, wenn valid_until
Parameter IS NOT NULL
, sonst sind sie abgelaufen (Ich habe einen Hintergrundjob, um dies jeden Tag automatisch einzustellen).
Ich versuche Benutzer auszuwählen, die aktive Jobs haben, aber ich möchte Benutzer mit Premium-Jobs kommen vor Benutzern mit freien Jobs vorausgesetzt, Benutzer können sowohl Premium-und kostenlose Stellenangebote zur gleichen Zeit aktiv haben.
SELECT DISTINCT users.id, users.email FROM users
LEFT OUTER JOIN jobs ON jobs.owner_id = users.id
WHERE jobs.valid_until IS NOT NULL;
Above Abfrage wählt richtig Benutzer mit mindestens einem aktiven Job (entweder Prämie oder frei), ich muss nur Benutzer bestellen Tabelle nach Arbeitsplätzen. Ich werde jede Hilfe/jeden Hinweis zu schätzen wissen. Vielen Dank!
Sie wollen keine Benutzer, die überhaupt keine Jobs haben, also sollten Sie (innere) Join nicht links Join verwenden. Hier funktioniert Links Join, weil es einfach so ist, dass Ihr Test für aktive/gültige Jobs diese arbeitslosen Benutzer eliminiert. Aber wenn Sie nach Jobs gefragt haben.valid_until IS NULL würden Sie auch die arbeitslosen Benutzer bekommen. Left Join gibt zurück, was innerer Join zurückgibt, plus nicht übereinstimmende linke Tabellenzeilen, die um Nullen erweitert wurden. – philipxy