Oracle sql рабочий лист - PullRequest
       11

Oracle sql рабочий лист

0 голосов
/ 10 августа 2011

Я пытаюсь сравнить 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-м (

Любая помощь будет принята с благодарностью.

1 Ответ

5 голосов
/ 10 августа 2011

Конкретная ошибка, которую вы получаете, заключается в следующем:

where id in ( select id, name, age from

Нельзя использовать предложение in для сравнения одного значения ID с 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
...