2014-03-26 4 views
3

내 테이블은 다음과 같습니다mysql에서 동일한 값 집합을 가진 열을 선택하는 방법은 무엇입니까?

patients(pid,name,city) 

disease(did,dname) 

has_disease(did,pid) 

내가 diseases.pid의 같은 세트가 각각 환자와 질병 테이블의 기본 키가 있고 has_disease 테이블의 외래 키입니다했던 환자를 나열합니다.

샘플 데이터 : 그들은 exactl을 가지고 있기 때문에

환자

pid name city 

1  John X 

2  Jim  Y 

3  Jack Z 

질병

did  dname 

    1  Typhoid 

    2  Malaria 

    3  ViralFever 

has_disease

did  pid 
    1  1 
    1  2 
    3  2 
    1  3 
    3  3 

은 위의 데이터에 대한 대답은 Jim and Jack입니다 y는 질병 1과 3의 동일한 세트 즉 말라리아 및 바이러스 성 열입니다. 나는 이것을 mysql에서 구현하는 방법을 알고 싶습니다. 관계가없는 부분은 존재하지만 작동하지 않습니다.

답변

3
select p.*, GROUP_CONCAT(d.did SEPARATOR ', ') AS all_dids 
from patients p 
    JOIN has_disease hd ON p.pid=hd.pid 
    JOIN disease d ON d.did=hd.did 
GROUP BY p.pid; 

이 쿼리는 환자와 환자의 질병을 반환합니다.

SELECT * 
FROM 
    (select p.*, GROUP_CONCAT(d.did SEPARATOR ', ') AS all_dids 
    from patients p 
     JOIN has_disease hd ON p.pid=hd.pid 
     JOIN disease d ON d.did=hd.did 
    GROUP BY p.pid) P1 
    JOIN 
    (select p.*, GROUP_CONCAT(d.did SEPARATOR ', ') AS all_dids 
    from patients p 
     JOIN has_disease hd ON p.pid=hd.pid 
     JOIN disease d ON d.did=hd.did 
    GROUP BY p.pid) P2 ON p1.all_dids=p2.all_dids and p1.pid<>p2.pid 

는 DIDS 자신의 전체 목록으로 환자의 2 개 세트를 비교하고 같은 DIDS리스트의 PID하지만 서로 다른 PID를

를 남겨
관련 문제