SQL查询以获取2个表之间的结果,第二个具有3种返回数据的可能性

时间:2018-09-24 18:25:05

标签: mysql sql

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

餐桌产品:

id  name
1   TV
2   RADIO
3   COMPUTER

表销售(product_id是引用product(id)的FK): id quantity product_id 1 50 2 2 100 3 3 200 3

电视尚未售出,收音机获得1笔交易(每50个单位),计算机获得2笔交易(每100个单位中的200个单位)。

现在,我必须创建一个查询,以显示产品及其销售,但是有一些条件使该任务变得困难:
1-如果没有销售,则显示为NULL;
2-如果有1笔交易,请显示该笔交易;
3-如果销售量超过1,请显示最新的销售量(我尝试使用函数MAX(id)使其简化,但没有用);

在上面的表示例中,我希望在适当的SQL查询后显示此信息:

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

我一直在尝试许多联接,内部联接等,但找不到我期望的结果。哪个SQL查询可以给出我期望的答案? 任何帮助将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:0)

希望以下查询有效。

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

答案 1 :(得分:0)

在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