SQL Abfrage - Join Probleme

Lenni2309

Neuer Benutzer
Beiträge
2
Hallo,

Vielleicht kann mir ja jemand helfen. Ich hab ein Problem mit einer SQL Abfrage. Ich habe folgende drei Tabellen (Jeweils mit entry und einem Wort):
4-jpg.64709

Nun hab ich folgende Abfrage erstellt:
SELECT DISTINCT
m.entry AS "Eintrag",
GROUP_CONCAT(m.masculineWords ORDER BY m.masculineWords SEPARATOR ', ') AS "Maskuline Wörter",
GROUP_CONCAT(f.feminineWords ORDER BY f.feminineWords SEPARATOR ', ') AS "Feminine Wörter",
GROUP_CONCAT(n.neutralWords ORDER BY n.neutralWords SEPARATOR ', ') AS "Neutrale Wörter"
FROM
entries_masculinewords m
LEFT OUTER JOIN entries_femininewords f
ON m.entry = f.entry
LEFT OUTER JOIN entries_neutralwords n
ON m.entry = n.entry
GROUP BY
m.entry

Und bekomme dementsprechend das ausgeliefert:
7-jpg.64710


Ich möchte aber gerne, dass jedes Wort nur einmal angezeigt wird. Heißt in der Spalte Maskuline Wörter sollte nur "abenteuer, agress" stehen. In der Spalte Feminine Wörter "abhängig, angenehm, aufmerksam" und in Neutrale Wörter "aufmerksam".
Leider hab ich nicht die großen SQL Kenntnisse.
Ich wäre aufjedenfall dankbar wenn mir jemand helfen könnte kann mir ja jemand helfen.
 
Werbung:
Du mußt das DISTINCT bei aggregieren machen, so:

Code:
test=*# select * from fw;
 id |  fw   
----+------------
  1 | aufmerksam
  2 | angenehm
  3 | abhängig
  3 | angenehm
  3 | abhängig
(5 Zeilen)

test=*# select * from mw;
 id |  mw   
----+-----------
  2 | aggress
  2 | abenteuer
  3 | aggress
  3 | abenteuer
(4 Zeilen)

test=*# select * from nw;
 id |  nw   
----+------------
  2 | aufmerksam
  3 | aufmerksam
(2 Zeilen)

test=*# select mw.id,array_agg(distinct mw.mw), array_agg(distinct fw.fw), array_agg(distinct nw.nw) from mw left outer join fw on mw.id=fw.id left outer join nw on mw.id=nw.id group by 1;
 id |  array_agg  |  array_agg  |  array_agg   
----+---------------------+---------------------+--------------
  2 | {abenteuer,aggress} | {angenehm}  | {aufmerksam}
  3 | {abenteuer,aggress} | {abhängig,angenehm} | {aufmerksam}
(2 Zeilen)
test=*# select mw.id, array_to_string(array_agg(distinct mw.mw), ', '), array_agg(distinct fw.fw), array_agg(distinct nw.nw) from mw left outer join fw on mw.id=fw.id left outer join nw on mw.id=nw.id group by 1;
 id |  array_to_string  |  array_agg  |  array_agg   
----+--------------------+---------------------+--------------
  2 | abenteuer, aggress | {angenehm}  | {aufmerksam}
  3 | abenteuer, aggress | {abhängig,angenehm} | {aufmerksam}
(2 Zeilen)

Die zwei anderen Spalten auch noch via array_to_string() passend behandeln. Das ist jetzt PostgreSQL, ob MySQL das in GROUP_CONCAT auch kann findest Du sicher selber raus.
 
Du mußt das DISTINCT bei aggregieren machen, so:

Code:
test=*# select * from fw;
id |  fw  
----+------------
  1 | aufmerksam
  2 | angenehm
  3 | abhängig
  3 | angenehm
  3 | abhängig
(5 Zeilen)

test=*# select * from mw;
id |  mw  
----+-----------
  2 | aggress
  2 | abenteuer
  3 | aggress
  3 | abenteuer
(4 Zeilen)

test=*# select * from nw;
id |  nw  
----+------------
  2 | aufmerksam
  3 | aufmerksam
(2 Zeilen)

test=*# select mw.id,array_agg(distinct mw.mw), array_agg(distinct fw.fw), array_agg(distinct nw.nw) from mw left outer join fw on mw.id=fw.id left outer join nw on mw.id=nw.id group by 1;
id |  array_agg  |  array_agg  |  array_agg  
----+---------------------+---------------------+--------------
  2 | {abenteuer,aggress} | {angenehm}  | {aufmerksam}
  3 | {abenteuer,aggress} | {abhängig,angenehm} | {aufmerksam}
(2 Zeilen)
test=*# select mw.id, array_to_string(array_agg(distinct mw.mw), ', '), array_agg(distinct fw.fw), array_agg(distinct nw.nw) from mw left outer join fw on mw.id=fw.id left outer join nw on mw.id=nw.id group by 1;
id |  array_to_string  |  array_agg  |  array_agg  
----+--------------------+---------------------+--------------
  2 | abenteuer, aggress | {angenehm}  | {aufmerksam}
  3 | abenteuer, aggress | {abhängig,angenehm} | {aufmerksam}
(2 Zeilen)

Die zwei anderen Spalten auch noch via array_to_string() passend behandeln. Das ist jetzt PostgreSQL, ob MySQL das in GROUP_CONCAT auch kann findest Du sicher selber raus.

--------------------

Vielen Dank, das war genau das was ich gebraucht habe :)
 
Werbung:
Zurück
Oben