MySQL:希望将这些UNION整合在一起

jam*_*and 9 mysql database union

好吧,我的头疼了......!

这个美丽的MySQL查询:

(SELECT mtwitterfollowers AS twitfollow FROM `media` WHERE media.id=1)
UNION
(SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN positions ON position_id = positions.id WHERE peoplejoin.media_id = 1)
UNION 
(SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN networkjoin ON networkjoin.network_id = peoplejoin.network_id LEFT JOIN positions ON position_id = positions.id WHERE networkjoin.media_id = 1)
Run Code Online (Sandbox Code Playgroud)

...返回三行漂亮的数字.

理想情况下,我希望此查询返回所有三个"twitfollow"结果,SUMmed在一起.

但是,对它们进行舍入会给我一个错误,即"每个派生表都必须有自己的别名",而且我对如何解决这个问题感到有些困惑.

(当然,我可以在PHP中总结结果;但我假设使用MySQL服务器更快地完成此操作.我会是对的吗?)

Dan*_*man 28

将整个查询用作FROM另一个查询的子句:

SELECT SUM(twitfollow) FROM (
    (SELECT mtwitterfollowers AS twitfollow FROM `media` WHERE media.id=1)
    UNION ALL
    (SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN positions ON position_id = positions.id WHERE peoplejoin.media_id = 1)
    UNION ALL
    (SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN networkjoin ON networkjoin.network_id = peoplejoin.network_id LEFT JOIN positions ON position_id = positions.id WHERE networkjoin.media_id = 1)
) t1
Run Code Online (Sandbox Code Playgroud)

我也改变了你UNION,UNION ALL因为你可能不想删除行只是因为一个表的总和等于另一个表的总和.

  • 是的,即使您不使用名称,您也必须为从名称中选择的派生表提供名称......这就是 `t1` 的全部内容。 (2认同)