我的表foo
包含列:
fid, lat, long
1, 0.1, 0.11
2, 0.2, 0.22
3, 0.3, 0.33
4, 0.4, 0.44
和表格bar
:
bid, f1, f2, f3
1, 1, 2, 3
2, 4, 3, 1
我想为lat
表的每个条目获取long
,f1
f2
,f3
,bar
。
到目前为止,我已经创建了查询:
select
b.bid,
f1.lat, f1.long,
f2.lat, f2.long,
f3.lat, f3.long
from
bar as b,
foo as f1,
foo as f2,
foo as f3
where
b.f1=f1.fid and
b.f2=f2.fid and
b.f3=f3.fid;
bid, lat, long, lat, "long", "lat", "long"
1, 0.1, 0.11, 0.2, 0.22, 0.3, 0.33
2, 0.4, 0.44, 0.3, 0.33, 0.1, 0.11
foo.fid
和bar.bid
是主键。我还可以添加表格所需的任何索引。
是否有更快更有效的查询来获得相同的结果?
答案 0 :(得分:1)
是。不要做旧式连接,做明确的连接。
select
b.bid,
f1.lat, f1.long,
f2.lat, f2.long,
f3.lat, f3.long
from
bar as b left join foo as f1 on b.f1 = f1.fid
left join foo as f2 on b.f2 = f2.fid
left join foo as f3 on b.f3 = f3.fid
当然,假设bid和fid是主要的外键对。
如果您有一个巨大的表,或者它是一个对性能非常敏感的场景,您应该在键上为表添加索引。如果foo中的每个元组(f1,f2,f3)都保证值,则可以使用内连接。