2012-06-07 80 views
2

SQL查詢用戶定義的變量:MySQL的使用在where子句

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子句並使用定義的變量後,我得到一個空的結果集。

回答

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 
+0

如果'username'不唯一,這可能會返回錯誤的結果。 – Quassnoi

+0

@Quassnoi:你說得對。我將它改爲'u.id'組 –

1

MySQL並不能保證在這種情況下會話變量的計算順序。

docs

評價涉及用戶變量的表達式的順序是不確定的,並基於包含在給定陳述內的元素可以改變;此外,這個順序不能保證是MySQL服務器版本之間

使用此相同:

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

JOIN確保你至少有一個用戶。