我有一个类似的查询:
select
qsn.code,
(select prs.display_name from prs where prs.id = qsn.fk_prs) display_name,
(select prs.address from prs where prs.id = qsn.fk_prs) address,
(select prs.tel from prs where prs.id = qsn.fk_prs) tel
from
qsn
where
qsn.register_date between :x1 and :x2
当我查看查询的执行计划时,它会查询 prs
表3次(每次使用INDEX UNIQUE SCAN
)。
我想知道我是否可以使用 WITH 子句查询 prs
表格?如何以这种方式编写查询。
我要提一下,因为每个表都有数百万条记录,加入它们会使查询变得很慢。
答案 0 :(得分:1)
使用联接:
select qsn.code, prs.display_name, prs.address, prs.tel
from qsn
left join prs on prs.id = qsn.fk_prs
where qsn.register_date between :x1 and :x2
答案 1 :(得分:1)
使用with子句,您的查询如下:
with abc as (select id,
display_name ,
address ,
tel
from prs)
select
qsn.code,
abc.display_name,
abc.address,
abc.tel
from qsn
inner join abc
on qsn.fk_prs = abc.id
where qsn.register_date between :x1 and :x2 ;
ps:未经测试。