2014-09-03 3 views
0

방법/결과이 집합하는 이유 : (반환 1215 개 기록)자기 조인은 어떻게 작동합니까? (MS의 SQL)

SELECT UM2.UCN_Group, UM2.UCN, UM2.Cust_EDP 
FROM CleanRoom.dbo.UCN_Master AS UM 
    JOIN CleanRoom.dbo.UCN_Master AS UM2 
      ON UM.UCN_Group = UM2.UCN_Group 
WHERE UM.UCN_Group NOT LIKE 'EXPN%' 

이 다를 수 : (1,203 레코드를 반환)

SELECT UM2.UCN_Group, UM2.UCN, UM2.Cust_EDP 
FROM CleanRoom.dbo.UCN_Master AS UM2 
WHERE UM2.UCN_Group NOT LIKE 'EXPN%' 

이 가입 안 첫 번째 쿼리의 조건에 따라 두 쿼리의 결과가 동일하게 유지됩니까? TIA

+0

첫 번째 쿼리를 'SELECT DISTINCT'로 변경하면 어떻게됩니까? – Barmar

+0

첫 번째 쿼리에 DISTINCT를 추가하면 동일한 수의 레코드가 생성됩니다 (1203). 왜 그런 일이 일어 났습니까? – dmbp5237

답변

2

나는 이것에 대한 유일한 이유를 볼 수 있습니다 : 동일한 UCN_Group 값을 가진 행이 있습니다.

+0

부여. 왜 행 수가 같지 않을까요? – dmbp5237

+2

같은 값을 가진 행 사이에 데카르트 곱을 생성하기 때문입니다. – Barmar

+0

@Barmar가 정확합니다. 짧은 조인은 다음 두 가지를 수행합니다. a) 테이블 1의 각 행과 테이블 2의 각 행을 쌍으로 만듭니다. b) ON 조건을 충족하는 쌍만 출력합니다. 조인의 작동 방식을 이해하려면이 기사를 읽으십시오. https://en.wikipedia.org/wiki/Join_(SQL) – Isantipov