mysql主表从表连接语句_MySQL的SQL 语句:根据从表记录个数对主表排序

MySQL的SQL 语句:根据从表记录个数对主表排序

一个主表 news,有字段 nId(自动增长),sName。

记录:

10 name10

13 name13

20 name20

21 name20

21 name20

30 name20

从表 reply,字段 nId(自动增长),pId,sReply。

记录:

20 aaaaa

13 bbbbb

10 ccccccc

20 vvvvvv

20 hhhhhh

10 sssss

从表以字段 pId 与主表字段 nId 关联。

目的:由主表取若干记录,排序依据:根据从表中与主表关联的记录的个数来排序。

以上述的记录为例,主表的记录顺序应该为:

20 name20

10 name10

13 name13

答案1:

select *, count(*) as iReply from

(SELECT a.nId, a.sName, b.sReply FROM news a, reply b WHERE a.nId=b.pId) as T

group by nId order by iReply limit 0,3

答案2:

SELECT a.nId, a.sName, count(b.sReply) as iReply from FROM news a, reply b WHERE a.nId=b.pId

group by a.nId order by iReply limit 0,3

注:

1,以上两例中形如 group by a.nId 的字段 nId 的值应该保持唯一性,最好是建有唯一性索引。

2,第一例似乎比较容易理解,即从联合查表的结果中再次查表。联合查表的结果作为一个“表”,再操作它 - 注意这里的 SQL 语句的语法值得借鉴。

3,好的解决方法应该是第二例。

4,但以上两例的做法的最大缺点是,效率太低!联合查表是最表的笛卡尔乘积,查询数量是两个表记录数的乘积。这对于大表查询将是致命的。

好的做法是,在主表中建一个字段表示从表的记录个数,每次向从表插入记录和删除记录时都同时修改该字段的值。则达到题目的目的,只要查主表、排序就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值