MySQL에서 PostgreSQL의 SELECT DISTINCT ON 기능을 복제하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-10 15:49:02
원래의
732명이 탐색했습니다.

How to Replicate PostgreSQL's SELECT DISTINCT ON Functionality in MySQL?

POSTGRESQL에서 MYSQL로: SELECT DISTINCT ON 쿼리 변환

데이터베이스 마이그레이션을 탐색하는 것은 어려울 수 있으며, 특히 PostgreSQL에서 MySQL로 전환할 때 더욱 그렇습니다. 일반적인 쿼리 구성 중 하나인 SELECT DISTINCT ON은 MySQL 대응 항목에 대한 질문을 제기합니다.

Postgresql SELECT DISTINCT ON

PostgreSQL에서 SELECT DISTINCT ON을 사용하면 중복 항목을 제거할 수 있습니다. 각 고유 세트에 대해 "첫 번째" 행을 유지하면서 지정된 표현식(col1, col2, col3)을 기반으로 행을 생성합니다. 예를 들어 테이블에 중복 행이 포함된 경우:

col1 | col2 | col3 | col4 | col5
--------------------------------
1 | 2 | 3 | 777 | 888
1 | 2 | 3 | 888 | 999
3 | 3 | 3 | 555 | 555
로그인 후 복사

SELECT DISTINCT ON (col1, col2, col3) col4, col5 FROM tablename 쿼리는 다음을 반환합니다.

col4 | col5
-----------
777 | 888
555 | 555
로그인 후 복사

선택 항목 ORDER BY를 지정하지 않으면 "첫 번째" 행을 예측할 수 없습니다.

GROUP BY에 대한 MySQL 확장

MySQL은 GROUP BY 사용을 확장하여 GROUP BY 절에 명시적으로 명명되지 않은 집계되지 않은 열을 선택할 수 있습니다. . 그러나 서버가 각 그룹에서 선택한 값은 임의적이므로 쿼리 출력에 예측할 수 없는 값이 발생합니다.

Converting to MySQL

MySQL에는 PostgreSQL SELECT DISTINCT ON 구문. 해당 기능을 에뮬레이트하는 한 가지 접근 방식은 GROUP BY:

SELECT col4, col5
FROM tablename
GROUP BY col1, col2, col3
로그인 후 복사

에 대한 MySQL 확장을 사용하는 것입니다. 이 쿼리는 PostgreSQL 쿼리와 유사하게 각 (col1, col2, col3) 세트에 대해 "첫 번째" 행을 반환합니다. 그러나 반환된 행은 order by 절이 없기 때문에 불확실한 상태로 남아 있습니다.

쿼리를 수정하면 "첫 번째" 행을 보다 정확하게 선택할 수 있습니다.

SELECT t1.col4, t1.col5
FROM tablename t1 INNER JOIN (SELECT col1, col2, col3, MIN(col4) as m_col4
                              FROM tablename
                              GROUP BY col1, col2, col3) s
     ON t1.col1=s.col1
        AND t1.col2=s.col2
        AND t1.col3=s.col3
        AND t1.col4=s.m_col4
GROUP BY
  t1.col1, t1.col2, t1.col3, t1.col4
로그인 후 복사

이것은 쿼리는 각 고유 표현식 세트(col1, col2, col3)에 대해 col4의 최소값이 있는 행을 효과적으로 검색하여 보다 예측 가능한 결과를 제공합니다. 출력.

결론

PostgreSQL 쿼리를 MySQL 쿼리로 변환하려면 사례별 분석이 필요합니다. 정확한 대응이 항상 존재하는 것은 아니지만 쿼리의 성격에 따라 상대적으로 간단한 것부터 다소 복잡한 것까지 다양한 전략과 해결 방법이 솔루션을 제공합니다.

위 내용은 MySQL에서 PostgreSQL의 SELECT DISTINCT ON 기능을 복제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿