第2部分跟进Faster way to union table SQL
我有TABLE_A
from_bank_id to_bank_id amount
1 null 100
null 1 200
1 null 300
null 2 200
我有TABLE_B
bank_id name
1 'BOA'
2 'SOME_BANK'
我需要输出
from_bank_id to_bank_id amount from_bank_name to_bank_name
1 null 100 'BOA' null
null 1 200 null 'BOA'
1 null 300 'BOA' null
null 2 200 null 'SOME_BANK'
现在我正在做
SELECT
t1.*
t2.name as from_bank_name,
t3.name as to_bank_name
FROM TABLE_A as t1
LEFT OUTER JOIN TABLE_B as t2 ON t1.from_bank_id = t2.bank_id
LEFT OUTER JOIN TABLE_B as t3 ON t1.to_bank_id = t3.bank_id
1)有更优雅的方式实现这一目标吗? 2)我对TABLE_B进行了多少次数据库查询?我猜2?每个加入一个?
答案 0 :(得分:0)
简单回答,不是真的。如果你理论上有一个单数bank_id
的表,那么你可以通过一个连接到具有银行名称的表来完成这个。
我认为值得指出的是,这是一个非常基本的查询,您可能过早地进行了优化。我认为杰夫阿特伍德(他是一个非常聪明/成功的人)article关于微优化可能对你很好。
在off-chance中你有一张像我上面提到的表格,这可行:
create table tblA
(
bank_id int,
amount int,
mode varchar(10)
);
create table tblB
(
bank_id int,
name varchar(10)
);
select
case
when mode = 'Outgoing' then bank_id
else null
end as from_bank_id
case
when mode = 'Outgoing' then name
else null
end as from_bank_name
,case
when mode = 'Incoming' then bank_id
else null
end as to_bank_id
,case
when mode = 'Incoming' then name
else null
end as to_bank_name
,amount
from
(
select
a.*
,b.name
from
tblA a
left join
tblB b
on b.bank_id = a.bank_id
);