2009-08-17 5 views
4

여기 내 문제를 설명하기 위해 샘플 테이블의 siteid 값. 내 시도는 다음과 같습니다.자체 테이블을 조인 할 때 중복 행을 제외하는 방법

mysql> select * from test T1 
    -> LEFT OUTER JOIN test T2 on T1.siteid = T2.siteid and T1.id <> T2.id; 
+----+--------------+--------+------+--------------+--------+ 
| id | type   | siteid | id | type   | siteid | 
+----+--------------+--------+------+--------------+--------+ 
| 1 | First Visit | 100 | 2 | Second Visit | 100 | 
| 2 | Second Visit | 100 | 1 | First Visit | 100 | 
| 3 | First Visit | 300 | NULL | NULL   | NULL | 
| 4 | First Visit | 400 | NULL | NULL   | NULL | 
| 5 | Second Visit | 500 | NULL | NULL   | NULL | 
| 6 | Second Visit | 600 | NULL | NULL   | NULL | 
+----+--------------+--------+------+--------------+--------+ 

이것은 기본적으로 내가 찾는 첫 번째 2 행을 제외하고는 결과입니다. 그 중 하나를 제거하고 싶습니다. 그래서, 나는 다음을 시도했다 :

mysql> select * from test T1 
    -> LEFT OUTER JOIN test T2 on T1.siteid = T2.siteid and T1.id <> T2.id 
    -> GROUP BY T1.siteid; 
+----+--------------+--------+------+--------------+--------+ 
| id | type   | siteid | id | type   | siteid | 
+----+--------------+--------+------+--------------+--------+ 
| 1 | First Visit | 100 | 2 | Second Visit | 100 | 
| 3 | First Visit | 300 | NULL | NULL   | NULL | 
| 4 | First Visit | 400 | NULL | NULL   | NULL | 
| 5 | Second Visit | 500 | NULL | NULL   | NULL | 
| 6 | Second Visit | 600 | NULL | NULL   | NULL | 
+----+--------------+--------+------+--------------+--------+ 

정확하게 내가 찾고있는 출력이다. 그러나 이것이 내가 GROUP BY를 사용하는 표준 방법이 아니며 위의 명령문이 ORACLE에서 실패 함을 알게되었습니다

일반 SQL 오류입니다.
ORA-00979 : 표현 BY하지 않는 GROUP

사람이 마지막 테이블과 같은 결과를 얻을 수 및 그 ORACLE와 함께 작동하는 방법에 대한 도움을 제공 할 수 있습니까?

답변

6

그냥 쿼리에서 단일 문자를 제거하고이 작업은 ("<"로 대체 "<>") ... 끝낼 것

select * from test T1 
LEFT OUTER JOIN test T2 on T1.siteid = T2.siteid and T1.id < T2.id 
관련 문제