在SELECT子句中使用子查询,并将表连接到自身

时间:2015-03-05 12:56:17

标签: oracle join subquery

尝试在SELECT子句中创建子查询(使用Oracle 11g)。子查询包括表与自身的连接。我得到一个“ORA-01427:单行子查询返回多行”错误消息(我最大的敌人......)。这是我的代码:

SELECT e.ISBN,
(SELECT p2.PAGE_NUMBERS FROM PAGE_NUMBERS_TABLE p1 INNER JOIN PAGE_NUMBERS_TABLE p2
    ON p1.TITLE_CODE = p2.TITLE_CODE
    AND p2.FORMAT_CODE = 'HB'
    WHERE p1.FORMAT_CODE = 'OC') AS "Page Numbers"
    FROM ISBN_TABLE e

希望这是有道理的,如果没有意义,我可以进一步澄清我在这里要做的事情。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为问题在于,假设您的子查询为每个isbn行返回一行,那么您还没有包含isbn表和子查询之间的关联。

你应该做点什么(在这里猜测,因为我们不知道你的桌子结构):

SELECT e.ISBN,
(SELECT p2.PAGE_NUMBERS FROM PAGE_NUMBERS_TABLE p1 INNER JOIN PAGE_NUMBERS_TABLE p2
    ON p1.TITLE_CODE = p2.TITLE_CODE
    AND p2.FORMAT_CODE = 'HB'
    WHERE p1.FORMAT_CODE = 'OC'
    and    e.title_code = p1.title_code -- change this to whatever condition correlates the table and subquery!
    ) AS "Page Numbers"
    FROM ISBN_TABLE e

或者,您可以将其重写为连接,并将子查询与连接条件一起放在from子句中,例如。如此:

SELECT e.ISBN,
       pg.page_numbers AS "Page Numbers"
FROM   ISBN_TABLE e
       inner join (SELECT p2.PAGE_NUMBERS,
                          p1.title_code -- don't forget to include the join column(s)!
                   FROM   PAGE_NUMBERS_TABLE p1
                          INNER JOIN PAGE_NUMBERS_TABLE p2
                            ON p1.TITLE_CODE = p2.TITLE_CODE
                   AND    p2.FORMAT_CODE = 'HB'
                   WHERE  p1.FORMAT_CODE = 'OC') pg
         on (e.title_code = pg.title_code) -- or whatever the join condition is

答案 1 :(得分:0)

您正在做的是使用查询选择列值。

select column1,
       (select some value from table where..) column2
from table

您必须确保查询

(select some value from table where..)

最多返回1行。如果它返回超过1行,则会得到ora-01427异常。