解決 SQL 中多行的「AND」交集
查詢資料庫以根據多個條件檢索資料是一項常見任務。但是,當需要將條件應用於多行時,該方法可能會變得複雜。本文為此類場景提供了更有效的解決方案,消除了子查詢的需要。
考慮包含「tagid」和「contentid」欄位的「tags」表。為了找到標記有標籤 334、338 和 342 的每個內容的“contentid”,傳統方法涉及巢狀子查詢。然而,隨著條件數量的增加,這種方法的效率會降低。
最佳化的方法避免了子查詢,從而帶來更快、更可擴展的查詢效能。這是修改後的查詢:
SELECT contentID FROM tags WHERE tagID in (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3
此查詢透過使用「IN」運算子和標記清單來實現交集。 「GROUP BY」子句以「contentID」將結果分組,「HAVING」子句過濾結果以僅包含具有所有指定標記的內容。
一般來說,可以擴展此模式以查找任意數量標籤的交集:
SELECT contentID FROM tags WHERE tagID in (...) --taglist GROUP BY contentID HAVING COUNT(DISTINCT tagID) = ... --tagcount
透過將「taglist」和「tagcount」佔位符替換為所需的值,此查詢可以有效地找到以下內容:滿足交叉條件。
以上是SQL中如何有效率地找出多行條件的交集?的詳細內容。更多資訊請關注PHP中文網其他相關文章!