2016-06-08 6 views
2

Ich brauche Tabellen zu verknüpfen und in einzelnen Abfrage Ausgabe als einzelnes Array zu holen, auch wenn ein Benutzer mehrere Adresse hatFetch das Ergebnis als einzelnes Array in einzelne Abfrage

Meine Frage:

SELECT user.name, address.address, user.place 
FROM user 
LEFT JOIN address 
WHERE user.user_id = address.user_id 
GROUP BY user.name, address.address, user.place 

einen Benutzer Angenommen hat mehrere Adresse bin derzeit als zwei Zeilen ausgegeben.Es gibt eine Möglichkeit, alle Ausgabewerte in einem einzigen Array mit einzelnen Abfrage zu sammeln.

Bitte helfen.

+1

Akzeptiert SQL Server diese Anweisung wirklich? Syntaxfehler nach ANSI SQL. – jarlh

+0

Fügen Sie einige Beispieltabellendaten hinzu, und das Ergebnis wird erwartet. – jarlh

Antwort

1

Ein anderer Weg ist FOR XML-Anweisung zu verwenden:

SELECT DISTINCT 
      u.name, 
      STUFF((SELECT ';' + a.[address] 
      FROM address a 
      WHERE u.[user_id] = a.[user_id] 
      FOR XML PATH('')),1,1,'') as [address], 
      u.place 
FROM [user] u 

Ausgang wird wie:

name address   place 
Mike adr1;adr2;adr3 someplace 
+0

Vielen Dank für die Hilfe, darf ich wissen, warum dieses 'a' hier, von Adresse a – youv

+0

Es ist Alias ​​in 'Adresse' Tabelle, es ist üblich zu verweisen zu Tabellen ohne zu schreiben ist alles Name. Sie geben Alias ​​einmal in der Abfrage an und verweisen dann mit Hilfe von Alias ​​auf Tabellenspalten. F. e. in meiner Antwort gab ich Alias ​​zu "Adresse" Tabelle "a" und "Benutzer" Tabelle - "u". Dann schreibe ich 'a.user_id' anstelle von' address.user_id'. – gofr1

+0

Ok, danke. Ich habe nicht viel Erfahrung im Schreiben von Abfragen. – youv

2

Sie können group_concat in Ihrer Abfrage verwenden.

SELECT user.name, group_concat(address.address) as 'address', user.place 
FROM user 
LEFT JOIN address 
WHERE user.user_id = address.user_id 
+1

Wie ich weiß, ist "group_concat" MySQL-Funktion, nicht SQL Server. – gofr1

+0

Vielen Dank für die Hilfe, lassen Sie mich überprüfen – youv

1

Versuchen FOR XML PATH (''), wird es Join Sie Adressen in einer Zeile:

select 
    [user].[name], 
    (select [address] + ', ' 
    from [address] 
    where 
     [user_id] = [user].[user_id] 
    for xml path('')), 
    user.place 
from [user] 
+0

Vielen Dank für die Hilfe, lassen Sie mich überprüfen – youv

Verwandte Themen