根据表中2个字段的值判断表中其余2个字段的值

问题遇到的现象和发生背景

有A,B,C三张表,A表中有a,b,c,d四个字段,其中a,b字段一个有值,另一个绝对为空,A表中a字段=B表中a字段,A表中b字段=C表中a字段。如果A表中a字段有值,则c=B表中b字段,如果A表中b字段有值,则d=C表中b字段
求解sql逻辑思维

select  A.a,A.b, B.b , C.b  from 
 A 
 left join 
 B  on A.a = B.a  and A.b is null 
 left join 
 C  on A.b = C.a  and A.a is null 
group by  A.a,A.b, B.b , C.b

问题说得有点绕,但看上去就是以A表做主表去关联另外两个表而已,只是A表的关联字段可能为空,由于不清楚你数据的主键关系,以及是否存在重复的情况,你可以先这样试试

select * from A 
full join B 
on A.a=B.a and A.c=B.b
full join C 
on A.b=C.a and A.d=C.b

另外,如果A表中的a,b两个字段的值不会出现重复的话,完全可以把这个两个字段合成一个字段来处理,这样就可以只用A表来left join另外两个表了。
同理,假设存在一样的值,也可以拼个字符让它不一样,比如a字段拼个"a",b字段拼个"b",此时关联条件的另一边也要拼上相同的字符,只是这样查询效率肯定会变低,因为走不到索引了