Как сделать Group By с помощью multi inner join - PullRequest
1 голос
/ 14 июня 2019

я пытаюсь сделать фильтрацию для выбранных данных, используя внутреннее соединение у меня есть 3 таблицы, я должен присоединиться к нему это мой запрос

SELECT DISTINCT *
FROM products_products
    INNER JOIN products_products_translations on products_products.id = products_products_translations.entry_id
    INNER JOIN products_products_related on products_products.id = products_products_related.entry_id
    INNER JOIN upload_files on products_products_related.related_id = upload_files.related_id
WHERE products_products_translations.locale = 'tr'
GROUP BY products_products_related.entry_id;


И это ошибка, которую я получил

Запрос 1 ОШИБКА: выражение № 35 из списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец shop.products_products_translations.id, который не является функциональным зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Удалите distinct и добавьте products_products_related.entry_id, COUNT(*)

SELECT products_products_related.entry_id, COUNT(*)
FROM products_products
         INNER JOIN products_products_translations on products_products.id = products_products_translations.entry_id
         INNER JOIN products_products_related on products_products.id = products_products_related.entry_id
         INNER JOIN upload_files on products_products_related.related_id = upload_files.related_id
WHERE products_products_translations.locale = 'tr'
GROUP BY products_products_related.entry_id;
0 голосов
/ 14 июня 2019

Вы не можете напрямую выбирать столбцы, которые не идут после предложения group by.

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

Следовательно, вам нужно указать в запросе, как объединять столбцы, которые не являются столбцами, по которым вы решили сгруппировать.

Вы можете объединить их с помощью COUNT (...) или SUM (...) или многих других функций.

Решение будет примерно таким:

SELECT products_products_related.entry_id, MAX(Column1), MIN(Column2) /*etc...*/
FROM products_products
    INNER JOIN products_products_translations on products_products.id = products_products_translations.entry_id
    INNER JOIN products_products_related on products_products.id = products_products_related.entry_id
    INNER JOIN upload_files on products_products_related.related_id = upload_files.related_id
WHERE products_products_translations.locale = 'tr'
GROUP BY products_products_related.entry_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...