#mysql #sql #join #left-join
#mysql #sql #Присоединиться #соединение слева
Вопрос:
Я пытаюсь объединить 2 таблицы вместе и получить количество внешних ключей… Извините, но я действительно не знаю, как объяснить это, поэтому позвольте мне продемонстрировать:
У меня есть 1 таблица «заказы» для заказов со следующими полями:
id, f_name, l_name, credit_card, ETC.
Затем у меня есть таблица ‘orders_details’ для элементов в порядке, вот так:
id, order_id, product_id, qty
Теперь я хочу выполнить запрос, объединяющий 2 таблицы, получая по 1 строке на каждую строку в таблице заказов, со столбцом, сообщающим мне, сколько продуктов в каждом заказе.
Кто-нибудь знает, как этого добиться?
PS Я также хотел бы иметь возможность получить общее количество всех заказов (я не хочу запускать отдельный запрос для каждого заказа).
Ответ №1:
SELECT o.id, o.f_name, o.l_name, COUNT(od.id), COALESCE(SUM(od.qty), 0)
FROM orders o
LEFT JOIN order_details od ON o.id = od.order_id
GROUP BY o.id, o.f_name, o.l_name
Комментарии:
1. @John Просто помните, что если вы добавите больше столбцов в
SELECT
предложение, вам также нужно будет добавить их вGROUP BY
2. @John: На самом деле в MySQL вам не обязательно включать все неагрегированные столбцы / выражения в GROUP BY. MySQL позволяет вам использовать сокращенную ГРУППУ, в которую вам просто нужно включить ключевые столбцы или выражения, которые однозначно определяют все другие неагрегированные данные, которые вы выбираете. Тем не менее, я думаю, совету Фила стоит последовать, поскольку большинство других СУБД не поддерживают сокращенные ГРУППОВЫЕ BYS, и кто знает, не решите ли вы начать изучать и использовать другой диалект SQL.