在維護網店的過程中,你可能會遇到需要從多個表中檢索資料的情況,例如作為類別和產品。然而,當一個表中並非所有行在另一個表中都有對應的條目時,就會出現挑戰。為了解決這種情況,讓我們探討如何從兩個表中選擇數據,確保返回所有行,即使它們缺乏對應關係。
考慮兩個表,一個用於類別列id 和標題,另一個適用於具有列id、ownerid、標題和價格的產品,其中Ownerid 引用父類別的id。使用以下查詢,您的目標是檢索所有類別以及每個類別的最低和最高價格:
SELECT sc.*, MIN(s.price) AS minp, MAX(s.price) AS maxp FROM categories AS sc, products AS s WHERE s.ownerid = sc.id GROUP BY sc.id
但是,此查詢僅檢索具有關聯產品的類別。那些沒有任何產品的被忽略,留下不完整的結果。
為了解決這個問題並確保所有類別的選擇,無論它們是否有相應的產品,我們採用了一個概念「外部連接」。本質上,外部連接包括一個表中的行,即使它們在另一個表中沒有匹配項。
使用LEFT JOIN 語法,我們修改查詢如下:
SELECT sc.*, IFNULL(MIN(s.price), 0) AS minp, IFNULL(MAX(s.price), 0) AS maxp FROM categories AS sc LEFT JOIN products AS s ON s.ownerid = sc.id GROUP BY sc.id
透過此更新的查詢,您可以擷取所有類別及其各自的最低和最高價格。沒有產品的類別的 minp 和 maxp 值為 0,滿足包含所有類別的要求。
作為使用 0 作為空類別的預設值的替代方法,您可以選擇改為傳回 null。使用 0 或 null 取決於您應用的特定需求。
透過掌握 MySQL 中外連接的概念和處理 null 值,您可以有效地從多個表中提取數據,確保您的數據的完整性和準確性。結果。
以上是如何從多個 MySQL 表中選擇資料並處理缺失的對應關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!