对列表中的每对值执行查询

时间:2014-06-23 04:50:00

标签: sql oracle oracle11g oracle10g

我有一个值列表,我会迭代并运行一个查询,其骨架可以被认为是这样。

对的列表 - ((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)

(假设实际上不在表格中,可能不会遗漏任何一对)

如何使用单个查询实现此目的?

由于

0 个答案:

没有答案