如何多次运行sql查询并将结果合并为单个输出?

时间:2019-02-04 04:23:28

标签: sql excel oracle oracle-sqldeveloper

我在Excel中存储了2500个obj数字的列表,为此我需要运行以下SQL:

SELECT    
    a.objno,
    a.table_comment,
    b.queue_comment
FROM
    aq$_queue_tables a 
JOIN 
    AQ$_QUEUES b ON a.objno = b.table_objno
WHERE
    a.objno = 19551;

有什么办法可以用清单或其他表中的objno在上面的SQL上编写循环吗?我还想存储/产生每个循环运行的所有结果作为单个输出。

我考虑了将数字上传到新表并添加where条件的选项:

a.objno=(SELECT newtab.objectno FROM newtab);

但是,我将在查询中编写的逻辑将排除某些objectno结果。假设截至该对象编号的某个日期,关联的对象编号具有特定的queue_comment。我不想拉那个记录。此条件将与某些对象匹配,而与其他对象不匹配。具有该条件并针对所有对象编号运行查询将返回0个结果。我不能分享原始逻辑,因为它会透露某些业务规则,并且会违反某些政策。

因此,我需要对每个对象分别运行查询,并组合结果。

我对SQL完全陌生,并已分配了此任务。我知道用于SQL的常规循环,但是我认为我不能在这种情况下应用它们。

任何指向有用主题的指南或参考链接也将受到赞赏。

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

一种选择是将对象编号从Excel工作表上载到数据库中的表,然后按以下方式运行查询。假设newtab是上载对象编号的表。

SELECT    
a.objno,
a.table_comment,
b.queue_comment

FROM
    aq$_queue_tables a JOIN AQ$_QUEUES b on a.objno = b.table_objno
WHERE
    a.objno IN (SELECT newtab.objectno FROM newtab);

我在这里使用了一个子查询,加入aq $也可以正常工作。

答案 1 :(得分:0)

阅读注释以及所有我认为您需要通过增加2列来增强Excel并加载到新表中的功能。

IN也可以通过以下方式使用:

SELECT    
    a.objno,
    a.table_comment,
    b.queue_comment
FROM
    aq$_queue_tables a 
JOIN 
    AQ$_QUEUES b ON a.objno = b.table_objno
WHERE
    (a.objno,a.table_comment,b.queue_comment) IN  (19551,'something','something');

因此新表将是:

 WHERE
        (a.objno,a.table_comment,b.queue_comment) IN 
        (select n.objno, n.table_comment, n.queue_comment from new_table n)