我对使用UNION ALL和INNER JOIN有疑问。 我找到了一些有关此问题的帖子,例如here或there,但我没有设法将其应用于我的问题。 我要做的是列出1)产品和2)订单和交货之间的差异。 我有3张桌子:
我设法使用以下内容获得(几乎)我想要的内容:
SELECT product
, sum(total)
FROM (
SELECT product
, SUM(value) as total
FROM orders
GROUP BY product
union all
SELECT product
, -1 * SUM(value) as total
FROM deliveries
GROUP BY product)
as alias
GROUP BY product
ORDER BY sum(total) DESC
我获得以下内容:
我希望得到:
表示产品名称而不是产品ID。 任何人都有解决方案吗? (到目前为止我的INNER JOIN或LEFT JOIN尝试失败了) 谢谢和问候
答案 0 :(得分:0)
加入产品表:
SELECT p.name, sum(total)
FROM (SELECT o.product, SUM(o.value) as total
FROM orders o
GROUP BY o.product
union all
SELECT d.product, -1 * SUM(d.value) as total
FROM deliveries d GROUP BY d.product
) od JOIN
product p
on od.product = p.id
GROUP BY p.name
ORDER BY sum(total) DESC