После обновления до MySQL 8 у меня появилось много запросов, которые не соответствуют новой настройке MySQL для полной группы.Ниже приведена упрощенная версия одного из запросов.У меня их много, и прежде чем пройтись по всему коду, я хочу полностью разобраться в проблеме.
У меня есть следующие записи в базе данных:
[prod_id] => 1
[prod_name] => Product 1
[prod_new] => 50.00
[prod_size] => L
[prod_id] => 2
[prod_name] => Product 1
[prod_new] => 45.00
[prod_size] => M
[prod_id] => 3
[prod_name] => Product 1
[prod_new] => 40.00
[prod_size] => S
[prod_id] => 4
[prod_name] => Product 4
[prod_new] => 100.00
[prod_size] => M
[prod_id] => 5
[prod_name] => Product 5
[prod_new] => 200.00
[prod_size] => M
Когда я запустилСледующий запрос в MySQL 5.x, я получил 3 результата.Содержит продукты 1, 4, 5. С соответствующим названием, ценой и размером.
SELECT prod_id, prod_name, prod_price, prod_size
FROM prod_product
GROUP BY prod_name
После обновления я получаю широко известную ошибку о неагрегированных столбцах.Поэтому я хочу это исправить, но в некоторых случаях это может привести к нежелательным результатам.Допустим, по какой-то причине я хотел самый высокий идентификатор продукта.
SELECT MAX(prod_id), prod_name, ANY_VALUE(prod_price), ANY_VALUE(prod_size)
FROM prod_product
GROUP BY prod_name
Это даст мне идентификаторы продукта 3, 4, 5. Но с идентификатором продукта 3 это даст мне цену и размер.идентификатора продукта 1.
Очевидно, что это нежелательное поведение.Я бы предположил, что, поскольку prod_id
является первичным ключом, база данных знает, какие значения показывать с соответствующим идентификатором.Когда я говорю MAX(prod_id)
, это уже указывает на одну запись в этой группе, зачем мне давать значения других записей из этой группы?
Я предполагаю, что упускаю что-то важное здесь.=)
Спасибо!