2010-07-12 3 views
0

내 데이터베이스에 두 개의 테이블을 사용하여 중복 항목 :처럼 보이는MySQL의 도움말, 절

TEST1

antigen pubmed_ID 
------------------ 
Hello  22 
Bye  22 

내가 사용할 때 선택 통계에 따름 :

select * 
    from test1, test2 
where test1.pubmed_ID = test2.pubmed_ID; 

알겠습니다 :

ID pubmed_ID antigen pubmed_ID 
-------------------------------- 
1 22  Hello 22 
2 22  Hello 22 
1 22  Bye  22  
2 22  Bye  22 

왜 항원이 복제 되었습니까? 그들은 test2 테이블에 단 한번 존재합니까? TEST1 = "ID"열 및 테스트 2 "항원"및 모두 "pubmed_ID"은 여기서 단순 compund 기본 키

내가 놓치고 어떤 형태 다음

기본 키

입니까?

답변

2

둘 모두 일치합니다. 어느 것이 당신이 선택하기를 기대합니까?

모든 행은 같은 pubmed_ID 있습니다. 따라서 test1의 각 행은 test2의 각 행과 일치하므로 조인 된 테이블에 4 (2 * 2) 개의 행이 있습니다.

+0

"double"검색에 대해 어떻게 선택합니까? – Harpal

+1

@Harpal, 4 중 어느 것을 원하십니까? –

+0

1 번과 4 번 행을 – Harpal

2

그건 조인 기준에 따라 test1에서 레코드 당 test2 경기에서 두 개의 레코드 때문에. 당신이 더 선택하고 싶다면

, 당신은 당신이 원하는 방법을 필터링하는 기준을 추가해야합니다. 예상대로 당신의 가입

+0

SELECT DISTINCT가 도움이됩니다. – Kalium

+0

@Kalium : 예제의 데이터에 따르면 DISTINCT는 ID 값으로 인해 도움이되지 않습니다. 이는 다른 값 집합과 다릅니다. –

+0

실제로 그렇습니다. 이것은 바로 데이터 오염입니다. – Kalium

1

이 작동 중입니다. 모든 행에 대해 동일한 pumed_ID를 일치시킵니다.

DBE를 잡고 때 테이블 TEST1에서 행 1

ID pubmed_ID 
------------------- 
1 22 

그리고 테이블 TEST2에서 같은 pubmed_ID, 두 행이 일치하여 행을 일치 ...

antigen pubmed_ID 
------------------ 
Hello  22 
Bye  22 

정확한 같은 일 test1 테이블의 두 번째 행에서 발생하며 전체 결과 집합에 네 개의 행이 포함됩니다.

의미가 있습니까?

0

그것은 간단하다의 test1.ID = 1 경기, 그것은 안녕하세요 안녕, 다른 TEST1 레코드에 대한 동일한 모두 pubmed_ID 것을.