SQL-LEFT JOIN und Duplikaten in Folge

stimmen
0

Sagen wir, ich habe 2 Tabellen, A und B, die jeweils eine Einheit möglicherweise mehrere B Einheiten, in einem Fall haben können, wenn ich alle B irgendeines bestimmten A ist zu bekommen, ich habe es mit einem einfachen linken tun könnte beitreten

select A.id aid,B.id bid from A
left join B on B.aid = A.id
where A.id = 1

und es wird eine Ergebnismenge zurückgeben wie

aid   bid
1     1
1     2
1     3

Wie Sie für die erste Spalte sehen, all diese 1'en sind irgendwie Duplikate. Ist es möglich, die SQL-Anweisung zu ändern, ihm ein Ergebnis zurückkehren lassen wie

aid    bid
 1      1,2,3

mit anderen Worten der ganze Gebot zu verknüpfen ist zusammen als eine Einheit?

Auch das, was, wenn es eine andere Tabelle C, und jedes A kann mehrere Cs hat, wie ich mache das SQL ein Ergebnis zurück gesetzt wie

 aid    bid    cid
  1     1,2,3   1,2

Anstatt von

 aid     bid    cid
  1       1      1
  1       2      1
  1       3      1
  1       1      2
  1       2      2
  1       3      2 

Vielen Dank!

Veröffentlicht am 07/02/2009 um 08:30
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
3

Welche DBMS verwenden Sie?

Ich kann nicht für andere sprechen, aber in MySQL, ab 4.1 können Sie GROUP_CONCAT verwenden

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

Z.B:

select A.id aid, GROUP_CONCAT(DISTINCT B.id) bid from A
left join B on B.aid = A.id
where A.id = 1
GROUP BY a.id
Beantwortet am 07/02/2009 um 08:40
quelle vom benutzer

stimmen
0

Versuchen Sie, die COALESCE-Funktion.

http://www.sqlteam.com/article/using-coalesce-to-build-comma-delimited-string

Beantwortet am 07/02/2009 um 08:42
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more