我一些很老的遺留代碼一起工作,和我見過的結構是這樣查詢表VS同一表的查詢子查詢
SELECT
FieldA,
FieldB,
FieldC
FROM
(
SELECT * FROM TABLE1
)
LEFT JOIN TABLE2 ON...
幾個查詢是否有任何優勢來編寫查詢這條路?
這是在Oracle中。
我一些很老的遺留代碼一起工作,和我見過的結構是這樣查詢表VS同一表的查詢子查詢
SELECT
FieldA,
FieldB,
FieldC
FROM
(
SELECT * FROM TABLE1
)
LEFT JOIN TABLE2 ON...
幾個查詢是否有任何優勢來編寫查詢這條路?
這是在Oracle中。
使用像這樣的子查詢似乎沒有優勢。原因可能是關於代碼的歷史遺蹟。
也許曾經有一次,那裏有一個更復雜的查詢。查詢被表/視圖取代,作者只是離開了原始結構。
同樣,曾幾何時,可能需要計算一列(比如對於外部查詢或select
)。這個列然後被包含在表格/視圖中,但結構仍然存在。
我非常確定Oracle在智能查詢優化時可以忽略子查詢。並非所有的數據庫都很聰明,但您可能想要清理代碼。至少,子查詢看起來很尷尬。
在SQL中是基本的好習慣,你不應該代碼表全掃描(SELECT * FROM table
,沒有一個WHERE
條款),除非必要,對性能問題。
在這種情況下,這是沒有必要的:同樣的結果可以通過獲得:
SELECT
Fields
FROM
TABLE1 LEFT JOIN TABLE2 ON...
@GordonLinoff對不起,那是一個錯字 – DixieFlatline
我相信外面的查詢帶來的是'左JOIN'的結果而你不能從表格中直接得到,什麼是'FIELDS'?你用它來代替'*'? –
它真的只是一個直接的'SELECT * FROM TABLE1'作爲子查詢嗎?我無法想象這樣做的好理由。最好它的功能相同,最糟糕的是它使查詢難以閱讀。 – JNevill