我有3张桌子说A,B,C。
表A有userid
列
表B有caid
列
表C包含lisid
和image
列。
一个userid
可以有一个或多个caid
s
一个caid
可以有一个或多个lisid
s。
如何选择userid
,其image
列的最大行数为not null
(在某些lisid
s image
列中为空在一些它有一些价值)。
有人可以帮忙。
答案 0 :(得分:0)
据推测,这些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。
获取具有最大值的所有行需要更多的工作。基本上,您必须加入上述查询才能获得列表
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不提供这些。