通常我必须在获取其他不相关行的查询中返回某些行的计数。
例如一个表用户一个表评论和一个表图片
User:
id
nickname
Review:
id
to_user_id
from_user_id
rating
Picture:
id:
user_id
url
假设我想在一个查询中检索“给定”用户 ID 的所有图片 url 的昵称以及查看该用户的人数。
我在执行此查询时认为的第一个也是简单的方法是:
SELECT
u.nickname
(SELECT count(*) FROM review WHERE to_user_id = u.id) as reviewCount,
p.url
FROM user
LEFT JOIN picture ON p.user_id = u.id
WHERE
u.id = 1
这样做的另一种方法是不使用该子选择,并在正确的 user_id 上加入评论表
SELECT
u.nickname,
r.reviewCount,
p.url
FROM user u
LEFT JOIN (
SELECT to_user_id, count(*) reviewCount FROM review GROUP BY to_user_id
) r ON r.to_user_id = u.id
LEFT JOIN picture ON p.user_id = u.id
WHERE u.id = 1;
我不是数据库查询性能和调优方面的专家。如果一个解决方案比另一个更好,有人可以解释我吗?(或者如果有其他更好的解决方案)?
编辑: 抱歉忘了提。我正在使用最新的 MySQL