我正在學習SQL,並且一直在經歷GalaXQL應用程序的章節。SELECT .. FROM(SELECT .. FROM ..)。我該如何改進這個查詢?
我已經寫了下面的問題來回答這個問題:「Hilight擁有星系中最高軌道距離的星球,記得在開始之前清除舊的山丘。
該查詢返回結果starid:23334,當插入到hilight表中時,該結果允許我繼續。然而,在將這個結果交還給我之前,該程序長時間停滯,所以我懷疑從數據庫中提取這些信息的方法更爲有效。
該查詢有效,但需要很長時間才能處理,我該如何改進此查詢?
INSERT INTO hilight
SELECT DISTINCT s.starid
FROM planets AS p, stars AS s, moons AS m
WHERE s.starid=(SELECT starid
FROM planets
WHERE orbitdistance=(SELECT MAX(orbitdistance)
FROM planets));
我這個查詢結構
首先背後的邏輯找到從表「行星」最大的軌道距離地球。
第二將「最高軌道距離」的值與表「行星」的「軌道距離」字段進行比較,並返回與該字段有關的「星號」。
第三將表格「行星」中的字段「starid」的值與表格「星星」中的字段「starid」進行比較,然後將該「starid」插入到表格「hilight」中。
數據結構:
嘗試更改'SELECT DISTINCT s.starid從行星AS p,星星AS s,衛星AS m WHERE ...'到:'SELECT s.starid FROM stars AS s WHERE ...' – 2014-10-08 14:11:37
問題1是你正在使用[古代加入語法。](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx)也是爲什麼你在做一個交叉連接嗎?你不應該爲這些連接設置「ON」狀態嗎?如果你這樣做了,你可能也不需要那麼明顯。 – Zane 2014-10-08 14:13:41
@ypercube:這會導致大量的「starid」被傳遞給「hilight」。由於「hilight」表中的「starid」是一個唯一的整數,這會導致錯誤「column starid不是唯一的」,並且不允許我進步。 但是,DISTINCT似乎是問題,在沒有DISTINCT的情況下運行查詢並且沒有嘗試將數據插入到hilight表中可以成功快速地運行。 – Awebb 2014-10-08 14:18:06