尝试在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
希望这是有道理的,如果没有意义,我可以进一步澄清我在这里要做的事情。
谢谢!
答案 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异常。