尽管所有表中都存在匹配项,但left join返回NULL

时间:2015-08-25 15:54:45

标签: sql

我有两个与外键无关的表。 TABLE_A CODE列类型为nvarchar(10),TABLE_B CODE列类型为nvarchar(2),CodeID列类型为bigint。 Table_B包含超过3百万行,我将只提供一些简短的样本:

    TABLE_A
    CodeId   | CODE    
    11       | DS      
    12       | TR     
    13       | MP     
    14       | KD 
    15       | 2A
    16       | AC    
    ...

    TABLE_B
    ID      | CODE  
    1       | DS     
    2       | DS      
    3       | DS      
    4       | TR    
    5       | TR    
    6       | MP    
    7       | KD      
    8       | KD   
    9       | 2A
    10      | AC
    11      | AC 
    ...

我想从TABLE_B中获取TABLE_B相关CodeId的每个CODE的结果集,所需的输出:

     RESULT SET
        ID      | CODE  | CODEID
        1       | DS    | 11
        2       | DS    | 11
        3       | DS    | 11
        4       | TR    | 12
        5       | TR    | 12
         ...

我试过左连接表

 Select * FROM  TABLE_B AS B 
left JOIN TABLE A AS A on A.CODE=B.CODE

但是对于某些代码值,例如2A,AC,它在结果集的CodeId列中返回Null,尽管两个表中都存在匹配。

更新 我刚刚执行了查询

SELECT * FROM TABLE_A where CODE in ('2A', 'AC')

我的输出没有任何结果。 但执行后

SELECT CODE FROM TABLE_A

我在CODE列中有2A和AC值的行。

2 个答案:

答案 0 :(得分:0)

正常的连接查询可以满足您的需求。试试这个:

select t2.id, t2.code, t2.date, t1.codeID 
   from table_B t2 join table_A t1 on (t2.code = t1.code)

您可以在此处看到SQLFiddle Demo

答案 1 :(得分:-1)

我发现CODE列中的一些varchar数据有换行符 通过执行此查询:

SELECT CODE FROM TABLE_A WHERE CODE LIKE '%' + CHAR(10) + '%'

这就是LEFT JOIN返回NULL的原因 - 查询无法找到匹配项 为了解决这个问题,我替换了所有换行符和回车符:

SELECT REPLACE (REPLACE(CODE,char(10),''),char(13),'')

Shannon Severance的评论帮助我找到了解决方案。