SQL中在 inner join 子句中 加入top子句 文章1

SQL 中有 TOP 子句可以限制加载记录的数目, 但是关键是前提是一定要用inner join 的前提top子句如何加进去

原查询语句 :

   SELECT * FROM good_detail INNER JOIN good ON good_detail.gd_good = good.g_id 
  INNER JOIN good_evaluate ON good.g_id = good_evaluate.gdl_good

现在需要限制查询good_evaluate的记录数量是前3条就可以了 

so 怎么写 , 加在那个地方呢?

试了一会真试出来了 :

加入top子句: ( 这里的数据库是mysql, 因为不同的数据库 top子句不同 )

   SELECT * FROM good_detail INNER JOIN good ON good_detail.gd_good = good.g_id 
  INNER JOIN (SELECT * FROM good_evaluate LIMIT 3) as evaluate ON good.g_id = evaluate.gdl_good

warning : 加上括号括号之后必须为其结果集设置别名( as xxx )否则报错

执行效果 : 先执行括号中的语句, 也就是先查出good_evaluate的前3条记录, 之后判断gdl_good 是否等于 good.g_id( 如果不等, 则整一个select的查询结果为空 )

so top子句就是加红色的这句, 可以加个括号嵌套一个select进去同时加上top子句, 完美的效果, 不过据说在数据量比较大的时候这种嵌套的select还是不要用, 性能会下降 , 因为下面这两句是等价的

SELECT * FROM good_detail INNER JOIN good ON ...

等价于 :

SELECT * FROM good_detail INNER JOIN (SELECT * FROM good) as gd ON ...

第一句性能比较高....

希望帮到你了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值