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...]
+
UPDATE 쿼리에서 join을 통해 할 경우에도
아마도.. 물리적으로 배열된 컬럼중에 가장 위에것이 되지 않겠냐 라는 답변이 있는데
반대로 생각하면 할때 마다 다른 결과가 나올수도 있다.. 라는 의미가 된다.
'프로그램 사용 > 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 |