SQL-запрос для получения результатов между 2 таблицами, а во втором есть 3 возможности возврата данных - PullRequest
0 голосов
/ 24 сентября 2018

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

таблица продуктов:

id  name
1   TV
2   RADIO
3   COMPUTER

таблица продаж (product_id - FKкакие ссылки на продукты (id)): id quantity product_id 1 50 2 2 100 3 3 200 3

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

В 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 голосов
/ 24 сентября 2018

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...