使用UNION ALL的mysql INNER / LEFT JOIN

时间:2015-04-15 02:08:26

标签: mysql inner-join union

我对使用UNION ALL和INNER JOIN有疑问。 我找到了一些有关此问题的帖子,例如herethere,但我没有设法将其应用于我的问题。 我要做的是列出1)产品和2)订单和交货之间的差异。 我有3张桌子:

  • 产品(身份证,姓名)
  • 订单(ID,产品,价值)
  • 交付(身份证,产品,价值)

我设法使用以下内容获得(几乎)我想要的内容:

    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

我获得以下内容:

  • 1 23
  • 2 33

我希望得到:

  • computer 23
  • car 33

表示产品名称而不是产品ID。 任何人都有解决方案吗? (到目前为止我的INNER JOIN或LEFT JOIN尝试失败了) 谢谢和问候

1 个答案:

答案 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