У меня есть 3 таблицы:
- color : фиксированный список оригинальных названий цветов и их HEX.
- store_color : пользовательский названия цветов (необязательно). Например, если вы хотите, чтобы красный цвет назывался «deadpool red»
- store_product_color : цвета, связанные с указанным c идентификатором продукта.
This является ли запрос причиной проблемы:
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
Возвращает идентификатор ассоциации продукта (основной), идентификатор цвета, шестнадцатеричный цвет, и, если существует пользовательское имя, его следует использовать, иначе используйте оригинальное имя цвета.
Запрос отлично работает в моей среде разработчика:
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
Что может быть причиной этой проблемы и как ее решить? Спасибо !