A表有10列B表有20列
A表和B表全都有1,2,3列但是数据内容可能不同。
现在要查询A\B两表 如果A表和B表的1列相同则取这条记录,如果1列不同则判断2列取2列相同的数据,如果1列和2列都不同3列相同则取3列。如果1,2,3都不同则不要取。 

解决方案 »

  1.   


    select * from a t1 
    inner join b t2 on t1.col1=t2.col2 or t1.col2=t2.col2 or t1.col3=t2.col3
      

  2.   

    select a.*
    from a
    inner join b on a.col1=b.col1 and a.col2=b.col2 and a.col3=b.col3
      

  3.   

    SELECT
    a.*,
    [value] = 
    CASE
    WHEN a.[1] = b.[1] THEN '取1'
    WHEN a.[2] = b.[2] THEN '取2'
    WHEN a.[3] = b.[3] THEN '取3'
    END      
    FROM A表 a
    INNER JOIN B表 b
    ON a.[1] = b.[1] OR
    a.[2] = b.[2] OR
    a.[3] = b.[3]
      

  4.   


    select * 
    from a t1
    inner join b t2 on t1.col1=t2.col1 or 
    (t1.col1<>t2.col1 AND t1.col2=t2.col2) or 
    (t1.col1<>t2.col1 AND t1.col2<>t2.col2 AND t1.col3=t2.col3)