Left Join 未傳回所有行:MySQL 查詢問題
在MySQL 中,LEFT JOIN 運算通常用於組合兩個表格中的行基於公共密鑰。但是,在某些情況下(例如本問題中所述的情況),查詢可能不會傳回所有預期的行。
查詢結構與問題
當WHERE 時會出現問題子句直接應用於連接條件,如原始查詢所示:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT OUTER JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id WHERE pr7.field=23
在這種情況下,WHERE 子句限制了join 僅傳回pr7.field = 23 的行。因此,它會排除 jos_hp_properties 表中沒有符合的 pr7.field 條目且值為 23 的行。這會導致查詢傳回的行數少於預期。
解決方案:移動WHERE 條件
解決問題並確保要返回第一個表中的所有行,應將WHERE 條件移至JOIN 的ON 條件,如下圖所示:
SELECT pr.*, pr7.value AS `room_price_high` FROM `jos_hp_properties` pr LEFT JOIN `jos_hp_properties2` pr7 ON pr7.property=pr.id AND pr7.field=23
將條件移至JOIN,查詢首先建立左側表之間進行聯接,然後根據指定的條件過濾聯接的行。這可確保 jos_hp_properties 表中的所有行都包含在結果集中,無論它們在 jos_hp_properties2 表中是否具有 pr7.field = 23 的匹配條目。
以上是為什麼我的 MySQL LEFT JOIN 不回傳所有行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!