跨行滿足唯一條件的值選擇
本問題描述了一個場景,其中我們有一個包含兩列的表格:userid 和 roleid。目標是檢索擁有所有三個指定 roleid 的唯一 userid。
一種方法是結合聚合和過濾:
<code class="language-sql">SELECT userid FROM userrole WHERE roleid IN (1, 2, 3) GROUP BY userid HAVING COUNT(1) = 3</code>
此查詢按 userid 分組結果,計算每個 userid 的每個 roleid 的出現次數。 HAVING 子句確保只選擇具有三個不同 roleid 的 userid。
然而,使用連接的另一種方法可能更有效率,尤其是在處理大型資料集時:
<code class="language-sql">SELECT t1.userid FROM userrole t1 JOIN userrole t2 ON t1.userid = t2.userid AND t2.roleid = 2 JOIN userrole t3 ON t2.userid = t3.userid AND t3.roleid = 3 AND t1.roleid = 1</code>
此查詢利用巢狀連線根據指定的 roleid 選擇 userid。外部連接條件檢查每個 userid 的每個 roleid 的存在,最終的 AND 條件確保所選 userid 具有所有三個指定的 roleid。
根據底層資料庫系統的資料分佈和效能特徵,任一方法都可能更合適。建議測試這兩種方法,以確定適合您特定場景的最佳解決方案。
以上是如何有效率地尋找具有全部三個指定角色ID的使用者?的詳細內容。更多資訊請關注PHP中文網其他相關文章!