如何用 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 join
s:
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;
我想通过将 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 join
s:
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;