我有 3 张桌子说 A、B、C。
表 A 有userid
列。
表 B 有caid
列。
表 C 有lisid
和image
列。
一个userid
可以有一个或几个caid
s。
一个caid
可以有一个或几个lisid
s。
如何选择一个userid
具有最大行数的image
列not null
(在某些lisid
simage
列中为空白,在某些中它具有某些值)。
有人可以帮忙吗?
据推测,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 不提供这些。