2016-07-12 6 views
1

한다고 가정 우리가 My_Tabel라는 이름의 테이블에 다음 데이터 : Partner_ID 열에서 0 값은 그/그녀가 하나 있음을 나타냅니다선택 고유 한 값

╔═══════════╦═════════════╦════════════╗ 
║ ID  ║ Person_Name ║ Partner_ID ║ 
╠═══════════╬═════════════╬════════════╬ 
║ 101  ║ John  ║ 3   ║ 
║ 100  ║ Miller  ║ 0   ║ 
║ 3  ║ Ruby  ║ 101  ║ 
║ 180  ║ Jack  ║ 0   ║ 
║ 199  ║ George  ║ 65   ║ 
║ 23  ║ Joseph  ║ 0   ║ 
║ 34  ║ Fredrick ║ 117  ║ 
║ 117  ║ Jinan  ║ 34   ║ 
║ 122  ║ Verena  ║ 0   ║ 
║ 65  ║ Mary  ║ 199  ║ 
╚═══════════╩═════════════╩════════════╝ 

.

╔═════════════╦══════════════╗ 
║ Person_Name ║ Partner_Name ║ 
╠═════════════╬══════════════╬ 
║ John  ║ Ruby  ║ 
║ George  ║ Mary  ║ 
║ Fredrick ║ Jinan  ║ 
╚═════════════╩══════════════╝ 

이상의 결과를 반환하는 최고의 SQL 쿼리 것입니다 :

우리는 반복 또는 중복없이 트너가 사람을 표시해야

, 원하는 결과는 다음과 같다 하는가?

이 코드 사용하고 있습니다 :

SELECT  
    t1.Name, t2.Name   
FROM My_Tabel t1 
INNER JOIN My_Tabel t2 ON (t2.ID = t1.Partner_ID) 

을하지만 반환 된 결과는 다음과 같습니다

SQL 문이 (서로 또는 교체) 업데이트 방법
╔═════════════╦══════════════╗ 
║ Person_Name ║ Partner_Name ║ 
╠═════════════╬══════════════╬ 
║ John  ║ Ruby  ║ 
║ Ruby  ║ John  ║ 
║ George  ║ Mary  ║ 
║ Mary  ║ George  ║ 
║ Fredrick ║ Jinan  ║ 
║ Jinan  ║ Fredrick ║ 
╚═════════════╩══════════════╝ 

원하는 결과를 얻을 수 ?

+1

무엇 [RDBMS (https://en.wikipedia.org/wiki/Relational_database_management_system)? –

+0

SQL Server @MaciejLos –

답변

1

그냥 각 쌍의 한면을 얻을 수있는 조건을 추가 :

SELECT t1.Name, t2.Name   
FROM My_Table t1 INNER JOIN 
    My_Table t2 
    ON (t2.ID = t1.Partner_ID) 
WHERE t1.ID < t2.ID; 
+0

고맙습니다. 저는 아직 초보자입니다. 조건을 추가 할 때 명세서의 논리에 어떤 변화가 있었는지 간략하게 설명해주십시오 : 'WHERE t1.ID

+0

@EzzedeenSaghier . . . 반복을 원하지 않으므로, 결과는't1.id'가 항상't2.id'보다 작아 지도록 명령합니다. 즉, 더 큰 가치를 먼저 얻지 못한다는 의미입니다. –