none
LEFT JOIN 突然见鬼了 RRS feed

  • 问题

  • declare @t1 table( id int)
    insert @t1 values
    ( 18456 ), ( null ), ( 18452 ), ( null )
    ;
    -- 直接 LEFT JOIN sys.messages, NULL 值愕然匹配了, 而且匹配的上上一条匹配成功的
    select *
    from @t1 a
    	LEFT JOIN (select message_id, text from sys.messages where language_id = 2052) m
    		on m.message_id = a.id 
    
    
    -- 数据扔到表变量里面再匹配,是我们理解的 LEFT JOIN 输出
    declare @t2 table( message_id int, text nvarchar(max) )
    insert @t2 select message_id, text from sys.messages where language_id = 2052
    select *
    from @t1 a
    	LEFT JOIN @t2 m
    		on m.message_id = a.id 
    

    很简单的两个 LEFT JOIN, 第一个结果很诡异
    2015年7月1日 3:34

全部回复

  • 第一个 LEFT JOIN 改 INNER JOIN, CROSS APPLY, OUTER APPLY, 都是诡异的结果
    2015年7月1日 3:37
  • 挺妖怪的,看来跟sys.messages视图有关系。从SQL 2005开始,system views的处理就跟以前不一样了。

    想不想时已是想,不如不想都不想。

    2015年7月3日 5:07
    版主