sql查询在两个表之间得到结果,第二个表有3种可能返回数据

imzjd6km  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(326)

即使我的问题被警告为类似的标题,我在这里找不到任何类似的问题。让我详细解释一下:我有两个表(我正在使用mysql)插入了这些值:
餐桌产品:

id  name
1   TV
2   RADIO
3   COMPUTER

表sales(product\ id是引用products(id)的fk): id quantity product_id 1 50 2 2 100 3 3 200 3 电视机还没卖出去,收音机卖了1台(50台),电脑卖了2台(100台一台,200台一台);
现在,我必须创建一个查询,在这里我可以显示产品及其销售情况,但是有一些条件使该任务变得困难:
1-如果没有销售,则显示明显为空;
2-如果有1次销售,显示该销售;
3-如果有超过一个销售,显示最新的销售(我已经尝试使用函数max(id)使它简单,但没有工作);
在上面的表示例中,我希望在正确的sql查询之后显示: products.NAME sales.QUANTITY TV NULL RADIO 50 COMPUTER 200 我尝试了很多连接、内部连接等,但是没有找到我期望的结果。哪个sql查询可以给出我期望的答案?任何帮助都将不胜感激。谢谢。

nnt7mjpx

nnt7mjpx1#

希望下面的查询工作。

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
pb3s4cty

pb3s4cty2#

在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

相关问题