有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",此时关联条件的另一边也要拼上相同的字符,只是这样查询效率肯定会变低,因为走不到索引了