我已经花了很长时间来了解如何正确地从几张表中得到结果我完全回到了原点,因为MySQL中的观点不允许我创建一个一个SubQuery ......
我找到了一个类似的线程,声明我可以为子查询编写单独的视图,但是尝试过这个,我让自己陷入了混乱。
我的原始查询是:
SELECT a.*
FROM (SELECT H.username,
H.variety,
IFNULL(SUM(H.weight),0) - IFNULL(HU.weight,0) As qty
FROM harvest H
LEFT JOIN harvest_used HU
ON H.variety = HU.variety AND H.username = HU.username
WHERE H.username = 'palendrone'
GROUP BY H.variety
ORDER BY H.variety ASC
) a
现在这种方法很完美,但正如我所描述的那样,我无法弄清楚我需要做什么才能将其转换为在MySQL服务器上作为视图运行...
非常感谢任何指导或帮助,谢谢。
答案 0 :(得分:1)
你的外部查询没有做任何事情,所以只需删除它:
SELECT H.username, H.variety,
COALESCE(SUM(H.weight), 0) - COALESCE(SUM(HU.weight, 0)) As qty
FROM harvest H LEFT JOIN
harvest_used HU
ON H.variety = HU.variety AND H.username = HU.username
WHERE H.username = 'palendrone'
GROUP BY H.variety
ORDER BY H.variety ASC;
MySQL不允许查看from
子句中的子查询。这是MySQL的一个特殊限制,似乎不存在于任何其他数据库中。
答案 1 :(得分:0)
看到上述解决方案缺少SUM并且还重复了结果。使用DISTINCT似乎解决了这个问题,这是我的答案:
SELECT H.username,
H.variety,
SUM(distinct(H.weight)) - SUM(distinct(HU.weight)) As qty
FROM harvest H
LEFT JOIN harvest_used HU
ON H.variety = HU.variety AND H.username = HU.username
WHERE H.username = 'palendrone'
GROUP BY H.variety
ORDER BY H.variety ASC