Problem mit UNIONs

Hallo zusammen :smiley:

ich habe eine Problem mit einer Aneinanderreihung von UNIONs.

Meine Abfrage sieht ungefähr so aus:

(SELECT 1 AS gruppen_id, id, name, beruf
FROM jobs
WHERE beruf ILIKE ‘Maler’)

UNION

(SELECT 2 AS gruppen_id, id, name, beruf
FROM jobs
WHERE beruf ILIKE ‘Lackierer’)

UNION

(SELECT 3 AS gruppen_id, id, name, beruf
FROM jobs
WHERE beruf ILIKE ‘Gärtner’)

UNION

(SELECT 4 AS gruppen_id, id, name, beruf
FROM jobs
WHERE beruf ILIKE ‘Teichbauer’)

.
.
.

Mein Problem ist jetzt, dass eine Person beispielsweise mehrere Berufe haben kann z.B. Maler und Lackierer.
Mit dieser Aneinanderreihung von UNIONs bekomme ich nun allerdings auch doppelte Einträge, da die Person eben bei Maler und Lackierer drinsteht. Ich möchte aber nur “unterschiedliche” Ergebnisse und keine doppelten Einträge.

Es soll aber auch noch gewährt bleiben, dass ich diese auch bekomme, wenn ich nur eine Berufsgruppe abfrage wie z.B.:

SELECT id, name
FROM jobs
WHERE group_id = 2

Ich bekomme dies einfach nicht hin. :frowning:

Hat jemand eine Idee, wie ich das umsetzen könnte?

Vielen Dank schon einmal im Voraus! :slight_smile:

LG,
Benni

Maler und Lackierer sind aber unterschiedlich, und Du verbibst auch unterschiedliche gruppen_id dafür. Du willst nur 1 Eintrag pro Name haben? Oder pro id?

Es gibt in PG die Erweiterung DISTINCT ON(), in Deinem Falle baue um die Abfrage drum herum etwas wie “select distinct on (name) gruppen_id, id, name from (deine jetzige Abfrage) order by name, gruppen_id”, dann würdest Du den Namen distinct bekommen, und zwar den Eintrag mit der kleinsten gruppe_id. Lies die Doku zu DISTINCT ON !

Danke dir, ich werde mir das anschauen (Y)