2016-10-31 2 views
0

룸 정보와 함께 룸메이트 쌍을 찾고 있습니다. 현재 나는 MySQL 테이블 부분 중복

아래의 예와 같이 테이블을 얻을 수 있습니다 :

- Id1 Id2 Dorm room 
- 101 133 2a 1 
- 121 154 1b 3 
- 218 584 3a 2 
- 133 101 2a 1 
- 584 218 3a 2 
- 154 121 1b 3 

나는이

- Id1 Id2 Dorm room 
- 101 133 2a 1 
- 154 121 1b 3 
- 218 584 3a 2 

같은 테이블 내가 테이블 등으로 시작했다 원하는대로 중복을 삭제하는 방법을 잘 이

- StuID Dorm room 
- 101 2a 1 
- 154 1b 3 
- 121 1b 3 
- ... 

고마워요!

+0

빠른 질문입니다. 룸메이트가 돌아 오는 순서 (예 : 101 133 2a 1 또는 133 101 2a 1도 허용 가능)가 있습니까? – Ben

+1

결합에 동등을 사용하지 마십시오.>를 사용하십시오. – xQbert

+0

벤 : 아니,별로 중요하지 않아. 방금 룸메이트가 구별되는 쌍을 찾아야 해 – Eugene

답변

0

studentID에 대해 join에 equals를 사용하지 말고 <또는>을 사용하십시오.

이것은 실제로 각 방에 1 명 또는 2 명의 룸메이트가있을 수있는 경우에만 작동합니다. 셋째가 존재한다면 다른 해결책이 만들어 질 것입니다.

SELECT T1.StuID, T2.StuID, T1.Dorm, T1.Room 
FROM table T1 
LEFT JOIN Table T2 
on T1.Dorm = T2.Dorm 
and T1.Room = T2.Room 
and T1.StuID < T2.StuID 

이것은 T2.StudentID 이하가되도록 T1.StudentID 강제, 따라서 더 낮은 ID 학생은 항상 순서없이 중복을 보장하는 첫 번째 일 것이다.

일부 회의실에 1 명이 있을지 확실하지 않았기 때문에 왼쪽 결합이 사용되었으므로 원하는 것으로 가정했습니다.

+0

알았어요! 정말 고맙습니다! BTW는 방을 두 명 이상 공유하는 경우 무엇을 사용해야합니까? 심지어 내 질문에 해당하지 않습니다. – Eugene

+0

그 모든 이름을 표시해야하는 것처럼 몇 가지 요인에 따라 달라질 수 있습니까? 얼마나 많은 사람들이 방에있을 수 있습니까? (무제한?) 방에 4 개만 추가하면 T2.StuID xQbert

+0

다른 데이터베이스의 창 기능; 'Row_number() over (partition by dorm, StuID에 의한 룸 오더) ')는 mySQL에서 사용자 변수를 사용하여 시뮬레이션 할 수 있습니다. 이를 통해 기숙사/방 콤보에 각 학생의 행 번호를 생성 한 다음 해당 행 번호를 사용하여 각 학생에게 결과 집합의 개별 열을 할당 할 수 있습니다. 우리가 상수 (예를 들어 4)를 가졌다면'Pivot' 문을 시뮬레이션하여 행을 열로 전환 할 수 있습니다. 그러나 그것은 한 방당 학생의 알려진 상한을 필요로합니다. – xQbert