2016-08-03 119 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)

    所以这使撷取记录更有效因为不需要额外的努力来过滤记录,从而获得更好的性能。