整合SQL查詢產生逗號分隔清單
在SQL中,經常需要從多個表中的資料產生逗號分隔清單。例如,假設您有三個表格:Applications(id,name)、Resources(id,name)和ApplicationsResources(id,app_id,resource_id),並且您希望建立一個表格來顯示所有資源名稱,其中每一行都包含與該資源關聯的應用程式的逗號分隔清單。
最簡單的方法是為每個資源執行單獨的查詢,但這效率低。相反,我們可以利用更複雜的SQL技術在一個查詢中實現這一點。
方法:
以下SQL查詢示範如何實現這一點:
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>
Oracle:
在Oracle中,字串聚合和連接的處理方式有所不同。請參考Oracle文件了解特定的字串處理技術。
以上是如何從多個 SQL 表高效率產生逗號分隔的清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!