在 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中文网其他相关文章!