mysql - MySQL JOIN 与两个表并使用 IFNULL。结果因 MySQL 版本而异
问题描述
我有 3 张桌子:
- color:原始颜色名称及其 HEX 的固定列表。
- store_color:自定义颜色名称(可选)。例如,如果您希望将红色称为“死池红色”
- store_product_color:与特定产品 ID 关联的颜色。
这是导致问题的查询:
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,结果与开发环境不同。它没有在自定义颜色名称和原始颜色名称之间进行选择,而是创建了 2 个不同的行,每个名称一个。
MySQL 5.6.30
我也尝试删除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
什么可能导致此问题,我该如何解决?谢谢!
解决方案
推荐阅读
- google-cloud-platform - 数据融合复制管道未在 Google Bigquery 中同步数据
- java - java - 如何使用带有字符串验证的java扫描仪?
- python - while 函数不适用于 CSV 文件列
- arrays - 如何在 Dart Flutter 中获取字典数组中某些键的值?
- python - 在虚拟环境python(Ubuntu)中运行的可执行文件
- javascript - 内联函数按 id 调用自动元素
- python - 在 Python 中将足球比分转换为数字
- opencl - 64 位原子操作可以在 AMD 卡上的 openCL 中工作吗?
- node.js - 关于 post 方法如何获取显示属性列表
- python - Python - 执行时间长