我有一个问题:
Select a.VD, a.VEXT, c.evalu from val_tb a, carin b, mapos c
where a.VA_record_id in
(Select reD from val_tb where valnum = 100008533 and VD=1887)
and a.VD in(1890)
and a.varnum=1
and b.sname = 'cat'
and a.VEXT = b.source_pos_id
and b.posd = c.posid;
是否可以将其转换为Oracle中的连接查询?
答案 0 :(得分:2)
您正在使用联接,只是使用了错误的语法。您的查询应如下所示:
Select a.VD, a.VEXT, c.evalu
from val_tb a join
carin b
on a.VEXT = b.source_pos_id join
mapos c
on b.posd = c.posid
where a.VA_record_id in (Select reD from val_tb where valnum = 100008533 and VD=1887) and
a.VD in (1890) and
a.varnum = 1 and
b.sname = 'cat';
这应该有相同的执行计划。
简单规则:从不在FROM
子句中使用逗号; 始终使用显式JOIN
语法。
对于性能,您需要索引。确保ON
子句中的所有列都具有索引(如果它们具有主键,则会执行索引)。然后对于IN
子句,您需要val_tb(valnum, vd, reD)
上的索引以及where
子句的另一个索引。
答案 1 :(得分:1)
使用 ANSI 连接语法并避免使用较旧的Oracle连接语法。
phonegap