2

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句を追加し、定義された変数を使用した後、空の結果セットを取得します。

4

2 に答える 2

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
于 2012-06-07T15:32:51.927 に答える
1

MySQLこの場合、セッション変数の評価の順序を保証するものではありません。

ドキュメントから:

ユーザー変数を含む式の評価の順序は未定義であり、特定のステートメントに含まれる要素に基づいて変更される可能性があります。MySQLさらに、この順序はサーバーのリリース間で同じであるとは限りません。

これを使って:

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

JOIN、少なくとも1人のサブスクライバーがいることを確認します。

于 2012-06-07T15:35:43.003 に答える