首页 > 解决方案 > MySQL JOIN 与两个表并使用 IFNULL。结果因 MySQL 版本而异

问题描述

我有 3 张桌子:

这是导致问题的查询:

SELECT
store_product_color.id AS id,
store_product_color.id_color AS id_color,
color.hex AS hex,
IFNULL(store_color.name, color.name) AS name
FROM store_product_color
JOIN color ON color.id_color = store_product_color.id_color
LEFT JOIN store_color ON store_color.id_color = store_product_color.id_color
WHERE store_product_color.id_product = 176
ORDER BY store_product_color.id_color

它返回产品关联的 id(主要)、颜色的 id、颜色十六进制,如果存在自定义名称,则应使用它,否则使用原始颜色名称。

该查询在我的开发环境中完美运行:

MySQL 5.6.25

MySQL 5.6.25 中有 2 个结果

棘手的部分来了。生产环境使用另一个版本的 MySQL,结果与开发环境不同。它没有在自定义颜色名称和原始颜色名称之间进行选择,而是创建了 2 个不同的行,每个名称一个。

MySQL 5.6.30

MySQL 5.6.30 中有 3 个结果

我也尝试删除IFNULL(store_color.name, color.name) AS name和添加store_color.name AS name2, color.name AS name1,但问题仍然存在。

我无法在 sqlfiddle 或 db-fiddle 中复制此问题。我添加了一个现场示例,但它就像在我的开发环境中一样工作正常:https ://www.db-fiddle.com/f/25J8Kh8m8GSoHzw9MUJ67M/2

什么可能导致此问题,我该如何解决?谢谢

标签: mysqlsqljoinleft-joinmysql-5.6

解决方案


推荐阅读