mysql在where子句中使用用户定义的变量

时间:2012-06-07 15:28:48

标签: mysql sql variables where-clause user-defined

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子句并使用定义的变量后,我得到一个空的结果集。

2 个答案:

答案 0 :(得分:3)

您可以使用group byhaving

执行此操作
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确保您至少有一个订阅者。