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 ...
第一句性能比较高....
希望帮到你了