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 중국어 웹사이트의 기타 관련 기사를 참조하세요!