Несмотря на то, что мой вопрос был предупрежден как похожий заголовок, я не нашел здесь похожей проблемы. Позвольте мне объяснить подробнее: у меня есть две таблицы (я работаю с MySQL) со вставленными этими значениями:

Столовые изделия:

id  name
1   TV
2   RADIO
3   COMPUTER

Таблица продаж (product_id - это FK, который ссылается на товары (id)): < Код > id количество product_id 1 50 2 2 100 3 3 200 3

Телевизоры не проданы, радиоприемники проданы 1 раз (50 единиц), а компьютеры - две продажи (одна из 100 и другая из 200 единиц);

Теперь я должен создать запрос, в котором я могу показать продукты и их продажи, но есть некоторые условия, которые усложняют эту задачу:
1 - Если продаж нет, показывать явно NULL;
2 - Если есть 1 распродажа, покажите эту распродажу;
3 - Если имеется более одной продажи, покажите последнюю продажу (которую я пытался использовать для упрощения функции MAX (id), но все же не сработало);

В приведенном выше примере таблиц я ожидаю показать это после правильного SQL-запроса:

products.NAME sales.QUANTITY TV NULL RADIO 50 COMPUTER 200

Я пробовал много объединений, внутренних объединений и т. Д., Но не смог найти ожидаемого результата. Какой SQL-запрос может дать ожидаемый ответ? Любая помощь будет очень оценена. Спасибо.

0
user10409294 24 Сен 2018 в 21:25

2 ответа

Лучший ответ

Надеюсь, что приведенный ниже запрос работает.

SELECT products.name, sl.quantity 
FROM products LEFT JOIN (
SELECT product_id, max(quantity) as quantity FROM sales GROUP BY product_id) sl
ON products.id = sl.product_id
0
Arihant 24 Сен 2018 в 18:32

В MySQL 8.0 вы можете:

with m (product_id, max_id) as ( -- This is a CTE
  select product_id, max(id) from sales group by product_id
)
select
    p.name,
    s.quantity
  from products p
  left join m on m.product_id = p.id
  left join sales s on s.id = m.max_id

Если у вас более старая версия MySQL, вы можете использовать табличное выражение:

select
    p.name,
    s.quantity
  from products p
  left join ( -- This is a table expression
    select product_id, max(id) as max_id from sales group by product_id
  ) m on m.product_id = p.id
  left join sales s on s.id = m.max_id  
0
The Impaler 24 Сен 2018 в 18:38