两个 SQL 双联接中性能最高的
Most performant of Two SQL Double joins
我有两个使用相同复合键的表,我想用左连接来连接它们。我的第一个查询是否是执行此操作的正确方法,或者像我的第二个示例中那样第二次加入 B 是 better/more 性能?我还应该提到这些表存在于数据库的相对侧 link,所以我认为连接越少越好...
Table答:
key1 | key2 | field
--------------------
1 | 1 | frog
1 | 2 | fish
3 | 2 | erik
Table乙:
key1 | key2 | otherField
---------------------------
1 | 1 | "three times"
1 | 3 | "rarely"
2 | 2 | "once"
期望的结果:
key1 | key2 | field | otherField
---------------------------------
1 | 1 | frog | "three times"
1 | 2 | fish | null
3 | 2 | erik | null
方法一:
select *
from A
left join B on (A.key1 = B.key1)
where (B.key2 = A.key2 or (B.key1 is null and B.key2 is null));
方法二:
select *
from A
left join B b1 on (A.key1 = b1.key1)
left join B b2 on (A.key2 = b2.key2)
只需在两个键上左连接:
SELECT A.key1, A.key2, A.field, B.otherfield
FROM A LEFT JOIN B
ON (A.key1 = B.key1)
AND (A.key2 = B.key2);
我有两个使用相同复合键的表,我想用左连接来连接它们。我的第一个查询是否是执行此操作的正确方法,或者像我的第二个示例中那样第二次加入 B 是 better/more 性能?我还应该提到这些表存在于数据库的相对侧 link,所以我认为连接越少越好...
Table答:
key1 | key2 | field
--------------------
1 | 1 | frog
1 | 2 | fish
3 | 2 | erik
Table乙:
key1 | key2 | otherField
---------------------------
1 | 1 | "three times"
1 | 3 | "rarely"
2 | 2 | "once"
期望的结果:
key1 | key2 | field | otherField
---------------------------------
1 | 1 | frog | "three times"
1 | 2 | fish | null
3 | 2 | erik | null
方法一:
select *
from A
left join B on (A.key1 = B.key1)
where (B.key2 = A.key2 or (B.key1 is null and B.key2 is null));
方法二:
select *
from A
left join B b1 on (A.key1 = b1.key1)
left join B b2 on (A.key2 = b2.key2)
只需在两个键上左连接:
SELECT A.key1, A.key2, A.field, B.otherfield
FROM A LEFT JOIN B
ON (A.key1 = B.key1)
AND (A.key2 = B.key2);