Ich habe zwei Tische:
TableA
------
ID,
Name
TableB
------
ID,
SomeColumn,
TableA_ID (FK for TableA)
Die Beziehung ist eine Reihe von TableA
- vielen von TableB
.
Jetzt möchte ich ein Ergebnis wie dieses sehen:
ID Name SomeColumn
1. ABC X, Y, Z (these are three different rows)
2. MNO R, S
Dies funktioniert nicht (mehrere Ergebnisse in einer Unterabfrage):
SELECT ID,
Name,
(SELECT SomeColumn FROM TableB WHERE F_ID=TableA.ID)
FROM TableA
Dies ist ein triviales Problem, wenn ich die Verarbeitung auf der Client-Seite durchführe. Dies bedeutet jedoch, dass ich auf jeder Seite X-Abfragen ausführen muss, wobei X die Anzahl der Ergebnisse von ist TableA
.
Beachten Sie, dass ich nicht einfach ein GROUP BY oder ähnliches durchführen kann, da es mehrere Ergebnisse für Zeilen von zurückgibt TableA
.
Ich bin mir nicht sicher, ob eine UDF mit COALESCE oder ähnlichem funktionieren könnte.
sql-server
tsql
join
Donnie Thomas
quelle
quelle
1. Erstellen Sie die UDF:
2. Verwendung in Unterabfrage:
3. Wenn Sie eine gespeicherte Prozedur verwenden, können Sie Folgendes tun:
quelle
Ich denke, Sie sind mit COALESCE auf dem richtigen Weg. Hier finden Sie ein Beispiel für die Erstellung einer durch Kommas getrennten Zeichenfolge:
http://www.sqlteam.com/article/using-coalesce-to-build-comma-delimited-string
quelle
In MySQL gibt es eine group_concat- Funktion, die zurückgibt , wonach Sie fragen.
quelle
Möglicherweise müssen Sie weitere Details angeben, um eine genauere Antwort zu erhalten.
Da Ihr Datensatz etwas eng erscheint, sollten Sie möglicherweise nur eine Zeile pro Ergebnis verwenden und die Nachbearbeitung auf dem Client durchführen.
Wenn Sie also wirklich möchten, dass der Server die Arbeit erledigt, geben Sie eine Ergebnismenge wie zurück
Das ist natürlich eine einfache INNER JOIN on ID
Wenn Sie die Ergebnismenge wieder auf dem Client haben, pflegen Sie eine Variable namens CurrentName und verwenden Sie diese als Auslöser, wenn Sie die Erfassung von SomeColumn für die nützliche Aufgabe beenden möchten.
quelle
Angenommen, Sie haben nur WHERE-Klauseln in Tabelle A, erstellen Sie eine gespeicherte Prozedur wie folgt:
Füllen Sie dann ein DataSet ds damit. Dann
Schließlich können Sie der Seite einen Repeater hinzufügen, der die Kommas für jede Zeile setzt
Auf diese Weise erledigen Sie dies clientseitig, jedoch mit nur einer Abfrage, wobei nur minimale Daten zwischen Datenbank und Frontend übertragen werden
quelle
Ich habe die von priyanka.sarkar erwähnte Lösung ausprobiert und sie hat es nicht ganz zum Laufen gebracht, als das OP darum bat. Hier ist die Lösung, mit der ich gelandet bin:
quelle
Lösung unten:
Mit dieser Option können Sie auch die Joins ändern
quelle
Dies funktioniert für die Auswahl aus verschiedenen Tabellen mithilfe der Unterabfrage.
quelle
Ich habe alle Antworten überprüft. Ich denke beim Einfügen von Datenbanken sollte es so aussehen:
Das Komma sollte am vorherigen Ende stehen und nach "Gefällt mir" suchen
%,X,%
quelle