0

2 つの列を比較しようとしていますが、一致しない行を返すことが目標です。たとえば、列1と2に次のものがあります

1                     2
id name age job       id  name  age  job
1   aaa  11 bbb        1   aaa   11   bbb
2   ccc  22 ddd        2   ccc   22   eee

私が探しているリターンは

2  ccc 22  ddd
2  ccc 22  eee 

私は次のものを使用しようとしています

select id, name, age from 1 where id in
(
select id, name, age from 1
minus
select id, name, age from 2
)
union all
select id, name, age from 2 where id in
(
select id, name, age from 1
minus
select id, name, age from 2
)
order by id

次のエラーが表示されます

ORA-00913: demasiados valores
00913. 00000 -  "too many values"
*Cause:    
*Action:
Error at Line: 6 Column: 1

それは1番目の行を指します(

どんな助けでも大歓迎です。

4

1 に答える 1

5

発生する特定のエラーは、次の理由によるものです。

where id in ( select id, name, age from

in句を使用して、IDの1つの値を他の3つの値と比較することはできません。

-- get values in 1 not in 2
SELECT 1.id, 1.name, 1.age 
FROM 1
LEFT JOIN 2 on 1.id = 2.id and 1.name = 2.name and 1.age = 2.age
WHERE 2.id is null
UNION
-- get values in 2 not in 1
SELECT 2.id, 2.name, 2.age 
FROM 2
LEFT JOIN 1 on 2.id = 1.id and 2.name = 1.name and 2.age = 1.age
WHERE 1.id is null
于 2011-08-10T10:40:57.897 に答える