在 SELECT 子句中使用子查询,将 table 连接到自身
Using a subquery in SELECT clause with a join of a table to itself
尝试在 SELECT 子句中创建子查询(使用 Oracle 11g)。子查询包括一个 table 到自身的连接。我收到一条 "ORA-01427: single-row subquery returns more than one row" 错误消息(我最大的敌人...)。这是我的代码:
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
希望这是有道理的,如果没有意义,我可以进一步澄清我想在这里做什么。
谢谢!
您正在做的是使用查询选择列值。
select column1,
(select some value from table where..) column2
from table
您必须确保查询
(select some value from table where..)
returns最多1行。如果 returns 多于 1 行,您将得到 ora-01427 异常。
我认为问题是,假设您的子查询 returns 每行 isbn 一行,您没有包含 isbn table 和您的子查询之间的相关性。
你应该做类似的事情(在这里猜测,因为我们不知道你的 table 结构):
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
尝试在 SELECT 子句中创建子查询(使用 Oracle 11g)。子查询包括一个 table 到自身的连接。我收到一条 "ORA-01427: single-row subquery returns more than one row" 错误消息(我最大的敌人...)。这是我的代码:
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
希望这是有道理的,如果没有意义,我可以进一步澄清我想在这里做什么。
谢谢!
您正在做的是使用查询选择列值。
select column1,
(select some value from table where..) column2
from table
您必须确保查询
(select some value from table where..)
returns最多1行。如果 returns 多于 1 行,您将得到 ora-01427 异常。
我认为问题是,假设您的子查询 returns 每行 isbn 一行,您没有包含 isbn table 和您的子查询之间的相关性。
你应该做类似的事情(在这里猜测,因为我们不知道你的 table 结构):
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