首頁 > 資料庫 > mysql教程 > 如何在 SQL 中選擇具有多個角色 ID 的不同使用者 ID?

如何在 SQL 中選擇具有多個角色 ID 的不同使用者 ID?

DDD
發布: 2025-01-19 16:57:09
原創
722 人瀏覽過

How to Select Distinct User IDs with Multiple Role IDs in SQL?

跨多行擷取符合特定角色 ID 標準的使用者 ID

本文解決了選擇滿足分佈在資料庫表中不同行的多個角色 ID 條件的唯一使用者 ID 的挑戰。 讓我們考慮一個包含 userroleuserid 欄位的 roleid 表:

userid roleid
1 1
1 2
1 3
2 1

目標是識別與 userid 值 1、2 和 3 相關的所有不同 roleid 值。使用範例數據,預期輸出為 userid 1。兩種 SQL 方法可以實現此目的。

方法一:使用 HAVING 子句聚合查詢

此方法使用聚合函數和 HAVING 子句:

<code class="language-sql">SELECT userid
FROM userrole
WHERE roleid IN (1, 2, 3)
GROUP BY userid
HAVING COUNT(DISTINCT roleid) = 3;</code>
登入後複製

此查詢首先過濾 roleid 為 1、2 或 3 的行。然後,它按 userid 將結果分組,並使用以下方法計算每個使用者的 不同 roleid 值的數量COUNT(DISTINCT roleid)HAVING 子句過濾為僅包含具有三個不同角色 ID 的使用者。

方法二:自連線查詢

一種更有效的替代方法,特別是對於較大的資料集,是自連接方法:

<code class="language-sql">SELECT DISTINCT t1.userid
FROM userrole t1
JOIN userrole t2 ON t1.userid = t2.userid AND t2.roleid = 2
JOIN userrole t3 ON t1.userid = t3.userid AND t3.roleid = 3
WHERE t1.roleid = 1;</code>
登入後複製

此查詢使用三個自聯接:t1 選擇 roleid 1 的使用者; t2 確保他們也有 roleid 2; t3 確認它們有 roleid 3。 DISTINCT 確保僅傳回唯一的 userid 值。

最佳方法(聚合與連接)取決於表格大小和資料分佈。 對於匹配行機率較低的場景,自連接方法往往表現較好。

以上是如何在 SQL 中選擇具有多個角色 ID 的不同使用者 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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