MySQL СОЕДИНЯЙТЕСЬ с двумя таблицами и используя IFNULL. Результаты варьируются между MySQL версиями - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть 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

2 results in MySQL 5.6.25

Здесь начинается сложная часть. В производственной среде используется другая версия MySQL, и результаты отличаются от среды разработки. Вместо того, чтобы выбирать между пользовательским и исходным именем цвета, он создает 2 разных строки, по одной для каждого имени.

MySQL 5.6.30

3 results in 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

Что может быть причиной этой проблемы и как ее решить? Спасибо !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...