即使我的问题被警告为类似标题,我在这里也找不到任何类似问题。让我详细解释一下: 我有两个插入了这些值的表(我正在使用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查询可以给出我期望的答案? 任何帮助将不胜感激。 谢谢。
答案 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