首頁 > 資料庫 > mysql教程 > 如何從多個 SQL 表高效率產生逗號分隔的清單?

如何從多個 SQL 表高效率產生逗號分隔的清單?

Barbara Streisand
發布: 2025-01-18 22:21:11
原創
134 人瀏覽過

How to Efficiently Generate Comma-Separated Lists from Multiple SQL Tables?

整合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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板