2015-07-06 199 views
1

我不是查詢領域的exprt,所以想知道exper對下面的join查詢的指導,因爲性能對於我們的應用程序非常重要。我正在使用MSSQL。加入表格 - 正確的方法

我們總共有4個表格用於根據ID抽取數據。以下是表的結構:

Table:PLANT(ID,NAME) 
    ID_PLANT  | Name 
    100   CALIFORNIA 
    200   TEXAS 

    Table: SITE 
    ID_SITE | Name  | ID_PLANT 
    1    SAn Ramon  100 
    2    Dallas   200 
    3    Houstan  200 

    Table: MACHINE 
    ID_MACHINE  | Name | ID_SITE 
    1     LASIC  1 
    2     MOTOR  1 
    3     PUMP  1 
    4     LASIC  2 
    5     LASIC  3 

Table: MACHINEPARTS 
    ID_MACHINEPARTS | Name | ID_MACHINE 
    1      A   1 
    2      B   1 
    3      C   2 
    4      D   2 
    5      E   3 
    6      A   4 
    7      B   4 
    8      A   5 
    9      B   5 

所以現在我需要顯示MACHINEPARTS的每個tble的名稱列。所以我的查詢是以下幾點:

SELECT 
       MP.ID_MACHINEPARTS, 
       MP.NAME, 
       M.NAME, 
       S.NAME, 
       P.NAME 
FROM 
       PLANT P , SITE S , MACHINE M , MACHINEPARTS MP 
WHERE 
      MP.ID_MACHINE = M.ID_MACHINE AND 
      M.ID_SITE = S.ID_SITE AND 
      S.ID_PLANT = P.ID_PLANT 

此查詢工作正常,但它是寫這樣的連接查詢或我可以像內/外連接一些其它的方法提高它的路嗎?

在此先感謝。

+1

這是一個非常簡單的查詢。你有沒有遇到性能低下的問題?或者你只是想知道它是否會更好? –

+0

您可以使用'JOIN'重寫查詢,但性能會相同。許多人認爲使用'JOIN's更好,因爲它使查詢更易於閱讀。 –

+1

[避免使用舊式'JOIN'語法](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx ) –

回答

4

不,這會提高性能,但你會使用標準的ANSI聯接語法會更好:

SELECT 
     MP.ID_MACHINEPARTS, 
     MP.NAME, 
     M.NAME, 
     S.NAME, 
     P.NAME 
FROM MACHINEPARTS MP 
JOIN MACHINE M ON MP.ID_MACHINE = M.ID_MACHINE 
JOIN SITE S ON M.ID_SITE = S.ID_SITE 
JOIN PLANT P ON S.ID_PLANT = P.ID_PLANT 
+0

根據建議,我將使用JOIN語法重寫查詢。非常感謝您的幫助! –