SQL 문을 통해 이것저것 조인을 하다 보면
예상하지 못하게 이상하게 갯수가 많이 늘어가는 경우가 발생한다.
대개(?)는 1:1 조건인줄 알았던 테이블이 예상외로 1:N 조건이기 때문에 발생을 하는데
ROW_NUMBER() OVER(PARITION BY)를 이용하여 left join 결과를 정렬후
상위 쿼리에서(즉 LEFT_JOIN은 서버 쿼리에서 수행) ROW_NUMBER = 1인 조건으로 걸러내면 될 듯 하다.
일단 해보진 않았으니 패스~ 이론적으로만 알아둬야지.. 끄응
SELECT
A.PersonName, A.Email
FROM
(
Select Person.PersonName, Email.Email
,ROW_NUMBER() OVER(PARTITION BY Person.ID ORDER BY Email.Email) AS RN
From person
left join Email on Person.ID=Email.PersonId
) A
WHERE A.RN = 1
[링크 : https://dba.stackexchange.com/questions/103815...]
[링크 : https://stackoverflow.com/questions/3375436/how-do-i-limit-a-left-join-to-the-1st-result-in-sql-server]
+
UPDATE 쿼리에서 join을 통해 할 경우에도
아마도.. 물리적으로 배열된 컬럼중에 가장 위에것이 되지 않겠냐 라는 답변이 있는데
반대로 생각하면 할때 마다 다른 결과가 나올수도 있다.. 라는 의미가 된다.
[링크 : https://stackoverflow.com/questions/9502449/updating-and-join-on-multiple-rows-which-rows-value-is-used]