sql查询:
select
u.username,
@total_subscribers:=(
select count(s.id)
from subscribers as s
where s.suid = u.uid
) as total_subscribers
from users as u
where @total_subscribers > 0
如果我删除where @total_subscribers > 0
查询将显示所有用户及其总订阅者
但我想只显示那些拥有至少1个订阅者的用户...在我添加了where子句并使用定义的变量后,我得到一个空的结果集。
答案 0 :(得分:3)
您可以使用group by
和having
:
select
u.username,
count(s.id) as total_subscribers
from users as u
inner join subscribers as s on s.suid = u.uid
group by u.id
having count(s.id) > 0
答案 1 :(得分:1)
MySQL
不保证会话变量的评估顺序。
来自docs:
涉及用户变量的表达式的评估顺序是未定义的,可能会根据给定语句中包含的元素进行更改;此外,在
的版本之间,此订单不保证相同MySQL
服务器
使用此:
SELECT u.*, COUNT(*)
FROM users u
JOIN subscribers s
ON s.suid = u.uid
GROUP BY
u.uid
JOIN
确保您至少有一个订阅者。