2015-06-28 72 views
0

以下内容仅返回问题表中的一条记录和讨论表中的一条记录。这两个表中都有不止一个。MySQL UNION ALL仅从每个表中返回一条记录

我如何获得它返回所有结果?

SELECT d.discussion_id AS id, 
d.discussion_google_id AS user_id, 
d.discussion_title AS title, 
d.discussion_text AS text, 
d.discussion_views AS views, 
d.discussion_last_view_ip AS last_ip, 
d.discussion_created AS created, 
d.discussion_updated AS updated, 
u.google_picture_link AS picture_link, 
sum(v.vote_amount) AS votes_total 
FROM discussions AS d 
INNER JOIN google_users AS u 
ON u.google_id = d.discussion_google_id 
LEFT JOIN votes AS v 
ON v.vote_discussion_id = d.discussion_id 
WHERE d.discussion_deleted = 0 
UNION ALL 
SELECT q.question_id AS id, 
q.question_google_id AS user_id, 
q.question_title AS title, 
q.question_text AS text, 
q.question_views AS views, 
q.question_last_view_ip AS last_ip, 
q.question_created AS created, 
q.question_updated AS updated, 
u.google_picture_link AS picture_link, 
sum(v.vote_amount) AS votes_total 
FROM questions AS q 
INNER JOIN google_users AS u 
ON u.google_id = q.question_google_id 
LEFT JOIN votes AS v 
ON v.vote_question_id = q.question_id 
WHERE q.question_deleted = 0 
ORDER BY votes_total 

回答

1

当您使用正常的列和聚合函数的选择,你应该使用GROUP BY子句,否则的MySQL只返回第一行。

+0

就解决了,谢谢! –

+0

它返回一行。是的,这恰好是'第一',但这种行为不能保证。 – Strawberry

+0

是的,yhe“第一行”表示数据库服务器根据查询选择返回的任何行。这实际上是MySQL的一个有点愚蠢的功能。恕我直言,在99%的情况下使用正常列结合聚合函数没有GROUP BY,用户将更好地服务,如果数据库将返回一个错误,或者它会自动添加GROUP BY,因为它已经知道什么GROUP BY应该是(所有正常的列)。 – slaakso