MySQL 子查询多个字段关联到结果集
正常情况下可以在 select 内嵌套子查询作为结果集的字段,示例如下:
select id,name,(SELECT COUNT(id) FROM records WHERE user_id = users.id
) AS box_count FROM users
where user_id = 9527;
但如果需要子查询的多个字段返回,此时放在 select 是不行的:
SELECT SUM(money) as total_money, SUM(profit) as total_profit FROM records WHERE user_id = 9527;
当然可以将其拆分成两个(多个)子查询,但那样感觉会降低查询效率。
百度找到了一个解决方法,就是使用 join 替换子查询,将两个结果集放一起。
union 是不行的,union 是将相同字段的结果集放在一起,会增加记录数。
最终的实现:
select id,name,res.total_money,res.total_profit FROM users
JOIN (
SELECT SUM(money) as total_money, SUM(profit) as total_profit FROM records
) AS res ON res.user_id = users.id
where user_id = 9527;