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 ...

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

希望帮到你了

猜你喜欢

转载自blog.csdn.net/m0_37838381/article/details/76910671