我有一个值列表,我会迭代并运行一个查询,其骨架可以被认为是这样。
对的列表 - ((x1,y1),(x2,y2),...(xn,yn))xi,yi并非都是不同的。
q是一个oracle查询,它返回任何(xi,yi)
的单个值global_table是一个带
的单行表 id col deleted
1 Y NULL
来自'表'
的几行 id col deleted pid did
1 NULL Y 25 1
81 N NULL NULL 149
101 Y NULL 22 149
61 Y NULL NULL NULL
此外,表中有(pid,did,deleted)的UNIQUE约束。
查询q是这样的。
select w.finalcol from
(select coalesce(a.col,b.col,c.col,d.col) as finalcol from
(select * from global_table where deleted is null) a
left outer join
(select * from table where deleted is null) b
on b.pid is null and b.did is null
left outer join
(select * from table where deleted is null) c
on c.pid is null and c.did = xi
left outer join
(select * from table where deleted is null) d
on d.pid = yi and d.did = xi
) w
n = 60
n由另一个返回值对列表的查询确定。
for element in (list of pairs)
q(xi,yi) (xi and yi might be used any number of times in the query)
我正在尝试减少运行此查询的次数。 (从n次到1次)
我可以尝试在将它们从对列表中隔离之后传递单个列表和查询,但是捕获的是并非所有对都存在于被查询的表中。但是,你确实从表中得到了表中不存在的对的值,因为这里有一个默认的情况(不重要)。
默认情况是
select * from table where deleted is null
and c.pid is null and c.did = xi
select * from table where deleted is null
and c.pid = yi and c.did = xi
不要返回任何行。
我希望我的结果是
形式x1 y1 q(x1,y1)
x2 y2 q(x2,y2)
.
.
.
xn yn q(xn,yn)
(假设实际上不在表格中,可能不会遗漏任何一对)
如何使用单个查询实现此目的?
由于