如何用 2 个字段连接两个表

HOW TO JOIN TWO TABLES WITH 2 FIELDS

我想通过将 A 和 B 与填充字段连接起来,从 table B 获取 VAL,例如:

一个

F1,F2,F3
1,2,t1
2,3,t2

B

F1,F2,VAL
1,NULL,v1
NULL,2,v2

输出:

1,2,t1,v1
2,3,t2,v2

这是你想要的吗?

select a.*, b.val
from a
inner join b
    on (b.f1 is not null and b.f1 = a.f1)
    or (b.f2 is not null and b.f2 = a.f2)

或者:

select a.*, b.val
from a
inner join b 
    on  (b.f1 is null or b.f1 = a.f1)
    and (b.f2 is null or b.f2 = a.f2)

您可以加​​入 or:

select a.*, b.val
from a inner join
     b
     on b.f1 = a.f1 or b.f2 = a.f2;

这通常性能很差。另一种选择是两个 left joins:

select a.*, coalesce(b1.val, b2.val)
from a left join
     b b1
     on b1.f1 = a.f1 left join
     b b2
     on b2.f2 = a.f2 and b1.f1 is null;