sql - 子查询返回多个值

标签 sql database oracle oracle8i

我有以下查询,它给出了 req_no 和 order_noorder_no 是来自 sub_query 的,您可以从下面的 sql 中看到。对于一些 req_no,有多个 order_no,因此我得到了 ORA-01427: single-row subquery returns more than one row .

我想为一个 req_no 同时显示 order_no,我该如何实现? 非常感谢任何帮助。

谢谢

附言我们客户的一个数据库仍然是 Oracle 8i

SELECT  max_qst.req_no,
            (SELECT  DISTINCT max_odr.order_no
                FROM     maximo_orders max_odr,
                         maximo_order_revisions max_odv,
                         maximo_order_items max_odi,
                         maximo_order_dates max_odd,
                         maximo_requisition_order max_rqo,
                         maximo_requisition_details max_req
              WHERE       max_req.req_no = max_qst.req_no
                         AND max_req.req_yr = max_qst.req_yr
                         AND max_odr.order_no = max_odi.order_no
                         AND max_odi.order_item_id = max_odd.order_item_id
                         AND max_req.requisition_item_id = max_rqo.requisition_item_id
                         AND max_rqo.order_schedule_id = max_odd.order_schedule_id
                         AND max_odv.order_no = max_odi.order_no
                         AND max_odv.revision_no =
                                 (SELECT   MAX (max_alias.revision_no)
                                     FROM   maximo_order_revisions max_alias
                                    WHERE   max_alias.order_no = max_odv.order_no)
                         AND maximo_order_item (max_odi.order_no,
                                                                  max_odv.revision_no,
                                                                  max_odi.order_item_id
                                                                 ) = 'CONFIRMED'
                        )
  FROM  maximo_requisitions max_qst, maximo_requisition_details max_qsd
 WHERE       max_qst.qst_id = max_qsd.qst_id
            AND max_qst.enter_date = '2001'
            AND max_qst.req_no = 'PUR_12WX'

更新 1

期望输出。

REQ_No     ORDER_NO

PUR_12WX   PR_9078  
PUR_12WX   PR_9079  

最佳答案

使用连接而不是相关的子查询。

我已经从子查询中删除了 max_qst 引用并将它们移动到连接谓词。

我也刚刚将其更改为使用 LEFT JOIN。这允许没有返回 order_no 值的可能性。

SELECT
  max_qst.req_no,
  sub_query.order_no
FROM
  maximo_requisitions          max_qst
INNER JOIN
  maximo_requisition_details   max_qsd
    ON max_qst.qst_id = max_qsd.qst_id
LEFT JOIN
(
  SELECT DISTINCT
    max_odr.order_no,
    max_req.req_no,
    max_req.req_yr
  FROM
    maximo_orders              max_odr,
    maximo_order_revisions     max_odv,
    maximo_order_items         max_odi,
    maximo_order_dates         max_odd,
    maximo_requisition_order   max_rqo,
    maximo_requisition_details max_req
  WHERE
        max_odr.order_no            = max_odi.order_no
    AND max_odi.order_item_id       = max_odd.order_item_id
    AND max_req.requisition_item_id = max_rqo.requisition_item_id
    AND max_rqo.order_schedule_id   = max_odd.order_schedule_id
    AND max_odv.order_no            = max_odi.order_no
    AND max_odv.revision_no         = (SELECT MAX (max_alias.revision_no)
                                         FROM maximo_order_revisions max_alias
                                        WHERE max_alias.order_no = max_odv.order_no)
    AND maximo_order_item (max_odi.order_no,  max_odv.revision_no, max_odi.order_item_id) = 'CONFIRMED'
)
  suq_query
    ON  max_qst.req_no = sub_query.req_no
    AND max_qst.req_yr = sub_query.req_yr
WHERE
  max_qst.enter_date = '2001'
  max_qst.req_no = 'PUR_12WX'

关于sql - 子查询返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11859940/

相关文章:

mysql - 从 x 条记录中以五组为一组选择 SUM、MAX、MIN、AVG

my.cnf 中具有多种数据库编码的 MySQL

database - 一次又一次地查询数据库或一次将所有数据存储在一个文件中并查询文件?

Oracle 数据库安装卡在 'Starting Oracle Net Configuration Assistant'

mysql - 如何从已创建的表中向 oracle sql Developer 中插入数据

SQL Server 2008 SET QUOTED_IDENTIFIER OFF 问题

MySql查询以查找具有条件的同一列之间的差异

mysql - 同一列中多个值的连接语句,以逗号分隔

sql - 如何选择 SQL 数据库中的第一个奇数/偶数主键

mysql - 将包含数据的csv文件导入mysql