加入两张桌子

时间:2016-08-03 18:57:11

标签: mysql sql-server join

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

请告诉我差异,谢谢你。

2 个答案:

答案 0 :(得分:1)

查询是等价的..区别仅在于连接条件

在第一个中,连接条件部分在on子句中,其余部分在

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

在第二个连接只在on子句

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

然后它们是相同的

答案 1 :(得分: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));
    
  2. 在此查询中,您将从两个表中获取所有匹配的记录(Table1.ID = TABLE2.ID),然后应用此类过滤条件 WHERE (((TABLE2.MONTH1)=Table1.MONTH1) And ((TABLE2.ID)=Table1.ID))然后对最终结果执行更新操作。

    1. 查询

      UPDATE Table2 
      INNER JOIN Table1 ON (Table2.MONTH1 = Table1.MONTH1) AND (Table2.ID = Table1.ID) 
      SET Table2.NUM = [Table1].[NUM];
      
    2. 在此查询中,您将使用匹配条件(例如(Table2.MONTH1 = Table1.MONTH1) AND (Table2.ID = Table1.ID)

      )来提取匹配记录

      因此,这样可以在获取记录时提高效率,因为不需要额外的工作来过滤记录,从而获得更好的性能。