おそらく、IDは合理的な方法でテーブル間で分散されます。もしそうなら、以下はこれを行う必要があります:
select b.userid, count(*)
from TableB b join
TableC c
on b.caid = c.caid
where c.image is not null
group by b.userid
order by count(*) desc
limit 1
コメントの質問は、TableAをTableBに接続し、TableBをTableCに接続する方法です。合理的なアプローチは、TableBにuseridを、TableCにcaidを含めることです。
maxですべての行を取得するには、もう少し作業が必要です。基本的に、リストを取得するには、上記のクエリに参加する必要があります
select s.*
from (select b.userid, count(*) as cnt
from TableB b join
TableC c
on b.caid = c.caid
) s
(select count(*) as maxcnt
from TableB b join
TableC c
on b.caid = c.caid
group by b.userid
order by count(*) desc
limit 1
) smax
on s.cnt = smax.cnt
他のデータベースには、この種のクエリをはるかに簡単にするウィンドウ関数/ランキング関数と呼ばれる一連の関数があります。残念ながら、MySQLはこれらを提供していません。