對分組查詢進行多個 LEFT JOIN 後對 GROUP_CONCAT 中的重複值進行故障排除
在分組查詢中使用 GROUP_CONCAT
和多個 LEFT JOIN
可能會導致重複值。 當第三個 LEFT JOIN
為連結到使用者 ID 的每個(標籤、類別)組合引入多行時,通常會發生這種情況。 隨後的 GROUP BY
然後在 GROUP_CONCAT
結果中產生重複的(使用者 ID、標籤)和(使用者 ID、類別)對。
有幾個策略可以解決這個重複問題:
在 DISTINCT
中使用 GROUP_CONCAT
: 在 DISTINCT
函數內加入 GROUP_CONCAT
會直接刪除每個串連清單中的重複值。
順序LEFT JOIN
方法:順序執行LEFT JOIN
。首先,將使用者表與標籤表連接,將結果分組,然後 LEFT JOIN
這個中間結果與類別表,再次分組。這確保每個使用者 ID 都有一個具有不同標籤和類別組合的單行。
利用標量子查詢: 利用 SELECT
子句中的標量子查詢為每個使用者 ID 獨立計算 GROUP_CONCAT
值,確保每個使用者只有一行。
利用對稱INNER JOIN
: 使用LEFT JOIN
取代INNER JOIN
。將使用者表與標籤表連接起來,然後根據使用者ID執行另一個INNER JOIN
。對使用者資料表和類別表重複此程序。
最優解取決於資料結構和查詢效能。 分析查詢計劃和執行時間對於選擇最有效的方法至關重要。
以上是分組查詢多次 LEFT JOIN 後如何避免 GROUP_CONCAT 中出現重複值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!