1. 程式人生 > >SQL中在 inner join 子句中 加入top子句 文章1

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

第一句效能比較高....

希望幫到你了