MySQL Join with Where Clause
連接兩個表格時,可以使用 WHERE 子句過濾結果。但是,此子句的放置會顯著影響連接的效率。
在給定的情況下,目標是檢索所有類別以及特定使用者訂閱的類別。使用 LEFT JOIN 的初始查詢效果很好,但在使用者 ID 上新增 WHERE 子句似乎會將其轉換為 INNER JOIN。
要解決此困境,了解聯結條件之間的差異至關重要以及外連接中的 where 子句。連接條件在連接操作之前進行評估並定義將匹配的行。另一方面,where 子句在連接之後進行操作並過濾結果行集。
正確的方法是在連接條件本身中指定過濾器,如下所示:
SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id AND user_category_subscriptions.user_id = 1;
透過將過濾器放在ON 子句中,只有user_category_subscriptions 表中的匹配行才會連接到categories 表。這種方法更有效,並提供所需的結果:所有類別,包括特定用戶訂閱的類別。
以上是WHERE 子句放置如何影響 MySQL LEFT JOIN 效率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!