创建表但返回"太多值"错误

use*_*082 2 sql oracle oracle11g

我使用以下代码创建一个表,我没有太多列但仍然出错

Create table corrYear as
Select  a.Symbol ASymbol,b.Symbol BSymbol, corr(a.logp,b.logp) Correlation
From logprofitDEC a join logprofitDEC b
on a.Tdate=b.Tdate
where a.Symbol>b.symbol
And  a.symbol in (select asymbol,bsymbol from pairDec1st2nd)
And  b.symbol in (select asymbol,bsymbol from pairDec1st2nd)
And To_date(a.Tdate,'YYYYMMDD') between  DATE'2013-01-01' AND DATE'2013-12-31' 
And To_date(a.Tdate,'YYYYMMDD') between  DATE'2013-01-01' AND DATE'2013-12-31' 
group by a.symbol,b.Symbol;
Run Code Online (Sandbox Code Playgroud)

错误是

00913.00000-"too many values"
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,通常这是由太多列引起的.该怎么办?

jpw*_*jpw 5

我的猜测是这些行导致了错误:

And  a.symbol in (select asymbol,bsymbol from pairDec1st2nd)
And  b.symbol in (select asymbol,bsymbol from pairDec1st2nd)
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,subselect返回两列,其中只有一列如此:

And a.symbol in (select asymbol from pairDec1st2nd)
And b.symbol in (select bsymbol from pairDec1st2nd)
Run Code Online (Sandbox Code Playgroud)

如果我记得正确的Oracle允许IN谓词中的多个列,如下所示:

And (a.symbol, b.symbol) in (select asymbol,bsymbol from pairDec1st2nd)
Run Code Online (Sandbox Code Playgroud)

虽然我不确定最后一个.

  • 虽然Oracle允许组合语法,但在功能上它与两个`in`s不同:组合语法将要求`a.symbol`和`b.symbol`的每个组合存在于`pairDec1st2nd`的同一行中.原始版本独立于另一个检查每个值. (2认同)