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]

'프로그램 사용 > postgreSQL' 카테고리의 다른 글

sql 표준함수 종류  (0) 2019.12.09
postgresql 시퀀스 값 초기화 하기  (0) 2019.11.29
array_agg 빈 배열을 누적할 수 없습니다.  (0) 2019.11.28
sql over() partition by  (0) 2019.11.28
pg_tables, pg_sequences  (0) 2019.11.28
Posted by 구차니