2016-08-03 275 views
1
Table 1        
ID MONTH1 NUM NUM2 
XO3  4 0 
XO1 DEC 1 1 
XO1 JAN 1 2 
XO2 DEC 3 3 
XO2 JAN 3 4 

Table 2 
ID MONTH1 NUM 
XO3  
XO1 DEC 
XO1 JAN 
XO2 JAN 

1>連接兩個表

UPDATE Table1 
INNER JOIN TABLE2 ON Table1.ID = TABLE2.ID 
SET TABLE2.NUM = [Table1].[NUM] 
WHERE (((TABLE2.MONTH1)=Table1.MONTH1) And ((TABLE2.ID)=Table1.ID)); 

2>

UPDATE Table2 
INNER JOIN Table1 ON (Table2.MONTH1 = Table1.MONTH1) AND (Table2.ID = Table1.ID) 
SET Table2.NUM = [Table1].[NUM]; 

3>

Now 
Table 2 shows 
ID MONTH1 NUM 
XO3  
XO1 DEC 1 
XO1 JAN 1 
XO2 JAN 3 

所以我的問題是,是什麼樣的區別1> 2>查詢作爲兩個查詢都給我3>,如果我運行1>查詢,然後我得到3>作爲答案,因爲表顯示更新的列NUM爲1,2,3或 如果我運行第二個查詢2>它再次顯示更新的列NUM爲1,2,3

請告訴我區別謝謝你。

+0

請正確標記。這是SQL Server還是MySQL? – Eric

回答

1

查詢是等效..的差異僅在連接條件的方面

在第一連接條件是在一部分上子句和並且在

ON Table1.ID = TABLE2.ID 
    WHERE (((TABLE2.MONTH1)=Table1.MONTH1) And ((TABLE2.ID)=Table1.ID)); 

其餘

在第二個連接是僅在第

ON (Table2.MONTH1 = Table1.MONTH1) AND (Table2.ID = Table1.ID) 

那麼它們是相同的

0

是的兩個查詢產量相同的結果然後有什麼區別?右讓我們來看看

  1. 查詢

    UPDATE Table1 
    INNER JOIN TABLE2 ON Table1.ID = TABLE2.ID 
    SET TABLE2.NUM = [Table1].[NUM] 
    WHERE (((TABLE2.MONTH1)=Table1.MONTH1) And ((TABLE2.ID)=Table1.ID)); 
    

在這個查詢,你從兩個表中獲取所有匹配的記錄(Table1.ID = TABLE2.ID),那麼你將過濾標準像這樣 WHERE (((TABLE2.MONTH1)=Table1.MONTH1) And ((TABLE2.ID)=Table1.ID)),然後執行更新最終結果的操作。

  • 查詢

    UPDATE Table2 
    INNER JOIN Table1 ON (Table2.MONTH1 = Table1.MONTH1) AND (Table2.ID = Table1.ID) 
    SET Table2.NUM = [Table1].[NUM]; 
    
  • 在這個查詢您正在獲取匹配匹配條件的記錄等(Table2.MONTH1 = Table1.MONTH1) AND (Table2.ID = Table1.ID)

    所以這使擷取記錄更有效因爲不需要額外的努力來過濾記錄,從而獲得更好的性能。