在MySQL 中使用可選外連接從多個表中檢索資料
從多個表中查詢資料時,經常會遇到不全的情況一個表中的行在另一個表中具有對應的行。在這種情況下,最好從一個表格中檢索所有行,同時使用佔位符填入缺少的資料。
考慮以下場景:您有兩個表,一個用於類別(標題為「類別」),另一個用於產品(標題為「產品」)。 「產品」表有一個「ownerid」列,它引用「類別」表中的「id」列。
範例查詢
選擇所有類別和每個的最低和最高價格,您可以使用以下查詢:
SELECT sc.*, MIN(s.price) AS minp, MAX(s.price) AS maxp FROM categories AS sc LEFT JOIN products AS s ON s.ownerid = sc.id GROUP BY sc.id
Outer Join
這裡的關鍵修改是LEFT JOIN語句的使用。與僅傳回符合連線條件的行的INNER JOIN 不同,OUTER JOIN 傳回左表(在本例中為「類別」)中的所有行,並使用NULL 填入右表(「產品」)中的缺失值.
處理NULL 值
但是,NULL 值可以在某些情況下是不受歡迎的。要為沒有產品的類別傳回預設值(例如0)而不是NULL,可以使用IFNULL 函數:
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
注意事項
最後,它根據應用程式的特定要求,決定對於缺失資料使用NULL 還是預設值非常重要。空值表示實際上不存在數據,而預設值表示假設的數據。理解這種區別對於維護資料完整性至關重要。
以上是如何使用可選的外部連接從多個 MySQL 表中檢索資料並處理 NULL 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!