有关SQL 中Left Join 的有关问题,求大神帮助

有关SQL 中Left Join 的问题,求大神帮助
我想用一个表中的两个字段去关联另一个表中的一个字段
差不多就是
select * from ta a left join tb b on (a.a1=b.b1 or a.a2=b.b2)

逻辑上就是
if a1=b1
then 关联
else
if a2=b1
then 关联

请问这么写会不会造成数据重复
或者有其它写法

------解决思路----------------------
会不会造成数据的重复需要看楼主的具体数据了,简单点可以加 distinct 去掉重复数据,但效率会有点小影响!
一句话,没有真实的实例,无法按楼主的想法去分析。
------解决思路----------------------
看一下具体的数据  
用distinct  或者 group by  
都可以
------解决思路----------------------
如果你的逻辑是这样,那这样写就可以了,去除重复,建议用GROUP BY 虽然麻烦点~
------解决思路----------------------
这样写可能会造成重复的。如果表A 的A1,A2在表B的B1中都存在。就会关联2次。
举个例子

with cte as 
(select 1 as id,2 as id1 union all
 select 2 as id,9 as id1 union all
 select 0 as id,3 as id1 union all
 select 4 as id,10 as id1 union all
 select 10 as id,20 as id1 ),

cte1 as 
(select 1 as id,'a' as name union all
 select 2 as id,'b' as name union all
 select 3 as id,'c' as name union all
 select 4 as id,'d' as name union all
 select 5 as id,'e' as name union all
 select 6 as id,'f' as name )
 select * from cte as a join cte1 as b
 on a.id=b.id or a.id1=b.id
--结果
id          id1         id          name
----------- ----------- ----------- ----
1           2           1           a
1           2           2           b
2           9           2           b
0           3           3           c
4           10          4           d

(5 行受影响)


你可以针对这种情况。设置优先级。如果A表中2列都能关联哪个先关联,
然后对最后结果分组。
------解决思路----------------------
或者用这个试试

with cte as 
(select 1 as id,2 as id1 union all
 select 2 as id,9 as id1 union all
 select 0 as id,3 as id1 union all
 select 4 as id,10 as id1 union all
 select 10 as id,20 as id1 ),

cte1 as 
(select 1 as id,'a' as name union all
 select 2 as id,'b' as name union all
 select 3 as id,'c' as name union all
 select 4 as id,'d' as name union all
 select 5 as id,'e' as name union all
 select 6 as id,'f' as name )

 select * from cte as a join cte1 as b
 on a.id=b.id
 union all 
  select * from cte as a join cte1 as b
 on a.id1=b.id  where a.id not in(select id from cte1)
--结果
id          id1         id          name
----------- ----------- ----------- ----
1           2           1           a
2           9           2           b
4           10          4           d
0           3           3           c

(4 行受影响)