2011-08-10 6 views
0

2 개의 열을 비교하려고합니다. 목표는 일치하지 않는 줄을 반환하는 것입니다. 예를 들어 나는Oracle sql 워크 시트

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 

다음 컬럼 1과 2에있는 내가 찾고 반환 내가 얻을 다음

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 

를 사용하기 위해 노력하고있어

2 ccc 22 ddd 
2 ccc 22 eee 

입니다 다음 오류

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

목요일 t는 1 번째 줄을 말합니다. (

어떤 도움을 주시면 감사하겠습니다.

답변

5

당신이 얻고있는 특정 오류는 다음과 같은 이유로입니다 : 당신은 3 개 다른 값으로 ID의 단일 값을 비교하는 절에 사용할 수 없습니다

where id in (select id, name, age from 

.

-- 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 
+0

내가 모든 (2 마이너스을 선택 * 1 SELECT * FROM)' 및 노동 조합 (2에서 1을 뺀 선택 *에서 * 선택) '이었다 무슨 짓 게시물 유사했다 내가 원하는 것을 exacly 일했다 시간 동안 –

+0

나는 그것이 더 많은 휴대용 SQL 현명한 다른 시스템에 있기 때문에 왼쪽 안티 조인 패턴을 선택했지만 예 오라클에서 마이너스가 잘 작동 할거야 – Andrew

관련 문제