如果做的话,那效率也太低了
尤其是连接的列没做索引的话

解决方案 »

  1.   

    看着这名字偶就晕: "广义笛卡尔积"....这是根据你的查询来的. 如果你是CROSS OUT JOIN (or FULL JOIN)的话, 你说得对.但是, 如果你用了LEFT (or RIGHT or INNER) JOIN的话, SQL Server是不做"广义笛卡尔积"的.
      

  2.   

    楼上的,楼主说得本来就对啊。
    如果没有关键字说明,FROM后面多个表之间只用‘,’连接,结果当然是广义笛卡尔积。
      

  3.   

    课本里面很多的查询,为了规避join而用了这种方式。
      

  4.   

    请问left的时候,是怎么实现的呢?如果不做广义积的话?
    此外full join的时候,如果连接的键是索引,是不是就不用做笛卡尔积了?
      

  5.   

    楼主说的应该是对的,先做笛卡尔积,再进行select,可以从SQL Server的执行计划中看出来的。
      

  6.   

    一般流程:
    1、from后面的表,迪卡尔集
    2、表连接 on
    3、添加外部行 left/right
    4、where
    5、group by
    ……
    8、select
    ……
      

  7.   


    这种写法不推荐。。还是用join关键字
      

  8.   

    2000有三种方式:nested loop、merge、hash具体的搜索一下就知道了
      

  9.   

    sql 的逻辑顺序确实是先做笛卡尔乘积的,但实际上生成的查询计划一般不会这么做.inside sql server 2005 t-sql 这书的第一章就讲这个.
      

  10.   


    有可能会用临时索引,即我们经常在查询计划里见到的Indexed Lazy spool.