select *  from a inner join b on a.id=b.id inner join c on a.id=c.id
1,先联接 A 和 B,得到结果集,再拿这个结果集 和 C做联接2,A,B,C, 同时一条一条的去匹配。
是1还是2呢?还是其它的?

解决方案 »

  1.   

    1.好像是 a和b线连接,a再和c连接,然后再去找匹配的结果
      

  2.   

    --等同于
    select * from a , b ,c
    where a.id=b.id and a.id=c.id
      

  3.   

    可以去看下SQL的执行顺序这方面的资料。
      

  4.   

    SELECT * FROM DBO.TESTXZNN2 AS A 
    INNER JOIN 
    DBO.TESTXZNN3 AS B ON A.ROW=B.ROW
    INNER JOIN 
    DBO.TESTXZNN4 AS C ON A.ROW=C.ROW
      

  5.   

    SELECT *
    FROM DBO.TESTXZNN2 AS A 
    INNER JOIN 
    DBO.TESTXZNN3 AS B 
    ON A.ROW=B.ROW
    INNER JOIN 
    DBO.TESTXZNN4 AS C 
    ON A.ROW=C.ROW
    上图中选中的是SQL中第一个inner join 的运行,连接如下图:在图中看“输出列表”即可得知inner join 所连接的是那两张表了(A表和C表);
    下图中选中的是SQL中第二个inner join 的运行下图中看“输出列表”即可得知第二个inner join所连接的是什么表了(AC连接后与B连接):
      

  6.   

    分析一下多表联接的三种策略就知道了:嵌套循环联接、合并联接、哈希联接
    不管是哪一种,基本算法都是一个表作为内部输入,另一个表作为外部输入,然后进行比较,不存在二个以上的输入,以你说的为例(你这三个表都是内联接),以下几种都有可能,具体是哪一种这个没有固定的,优化器会自动选取一个最优的算法:
    (A + B) + C
    (A + C) + B
    (B + C) + A
    不存在(A + B + C)这种的