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 ...
第一句效能比較高....
希望幫到你了