Heim >Datenbank >MySQL-Tutorial >Wie generiert man effizient durch Kommas getrennte Listen aus mehreren SQL-Tabellen?
Integrieren Sie SQL-Abfragen, um durch Kommas getrennte Listen zu generieren
In SQL ist es oft notwendig, durch Kommas getrennte Listen aus Daten in mehreren Tabellen zu generieren. Angenommen, Sie haben drei Tabellen: Applications(id,name), Resources(id,name) und ApplicationsResources(id,app_id,resource_id) und möchten eine Tabelle erstellen, die alle Ressourcennamen anzeigt, in denen jede Zeile Folgendes enthält Die durch Kommas getrennte Liste der mit der Ressource verknüpften Anwendungen.
Der einfachste Weg besteht darin, für jede Ressource eine separate Abfrage durchzuführen, aber das ist ineffizient. Stattdessen können wir komplexere SQL-Techniken nutzen, um dies in einer einzigen Abfrage zu erreichen.
Methode:
Die folgende SQL-Abfrage zeigt, wie dies erreicht wird:
MySQL:
<code class="language-sql">SELECT r.name, GROUP_CONCAT(a.name SEPARATOR ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name</code>
SQL Server (2005):
<code class="language-sql">SELECT r.name, STUFF((SELECT ',' + a.name FROM APPLICATIONS a JOIN APPLICATIONRESOURCES ar ON ar.app_id = a.id WHERE ar.resource_id = r.id GROUP BY a.name FOR XML PATH(''), TYPE).value('text()[1]','NVARCHAR(max)'), 1, LEN(','), '') FROM RESOURCES r</code>
SQL Server (2017):
<code class="language-sql">SELECT r.name, STRING_AGG(a.name, ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name</code>
Orakel:
In Oracle werden String-Aggregationen und Joins unterschiedlich gehandhabt. Informationen zu spezifischen Techniken zur Zeichenfolgenverarbeitung finden Sie in der Oracle-Dokumentation.
Das obige ist der detaillierte Inhalt vonWie generiert man effizient durch Kommas getrennte Listen aus mehreren SQL-Tabellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!