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

在where子句中使用用户定义变量的mysql,mysql,sql,variables,where-clause,user-defined,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 如果我删

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
如果我删除
,其中@total_subscribers>0
查询将显示所有用户及其总订阅者


但我只想显示那些至少有1个订户的用户。。。添加where子句并使用定义的变量后,我得到一个空的结果集。

您可以使用
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

您可以使用
分组方式
拥有

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

MySQL
在这种情况下不保证会话变量的求值顺序

从:

涉及用户变量的表达式的计算顺序未定义,可能会根据给定语句中包含的元素而改变;此外,
MySQL
服务器的不同版本之间的顺序也不一定相同

使用以下命令:

SELECT  u.*, COUNT(*)
FROM    users u
JOIN    subscribers s
ON      s.suid = u.uid
GROUP BY
        u.uid

JOIN
确保您至少有一个订户。

MySQL
不保证在这种情况下会话变量的求值顺序

从:

涉及用户变量的表达式的计算顺序未定义,可能会根据给定语句中包含的元素而改变;此外,
MySQL
服务器的不同版本之间的顺序也不一定相同

使用以下命令:

SELECT  u.*, COUNT(*)
FROM    users u
JOIN    subscribers s
ON      s.suid = u.uid
GROUP BY
        u.uid
JOIN
确保您至少有一个订户