Postgresql의 DISTINCT ON 쿼리를 MySQL로 변환
Postgresql에서 MySQL로 마이그레이션하려면 기존 쿼리를 조정해야 하는 경우가 많습니다. 이러한 쿼리 유형 중 하나는 여러 열을 고려하면서 고유한 행을 검색하는 DISTINCT ON 쿼리입니다. MySQL에는 이에 상응하는 기능이 없지만 유사한 기능을 달성하기 위한 접근 방식이 있습니다.
Postgresql의 SELECT DISTINCT ON
Postgresql의 SELECT DISTINCT ON 쿼리는 지정된 열을 기반으로 고유한 행을 검색합니다. 예를 들면 다음과 같습니다.
SELECT DISTINCT ON (col1, col2, col3) col4, col5 FROM tablename
이 쿼리는 (col1, col2, col3)의 각 고유 조합에 대해 하나의 행만 반환하고 처음 발견된 col4 및 col5 값을 유지합니다.
MySQL Group By 확장
MySQL은 GROUP BY 절을 확장하여 다음 항목을 선택할 수 있습니다. 집계되지 않은 열. 그러나 각 그룹에 대해 반환되는 특정 행은 불확실합니다. 이는
SELECT col4, col5 FROM tablename GROUP BY col1, col2, col3
과 같은 쿼리가 행 선택 측면에서 Postgresql의 DISTINCT ON 쿼리와 동일하다는 것을 의미합니다. 그러나 반환된 행은 예측할 수 없습니다.
MySQL에 적응
예측 가능성을 보장하려면 질서 있는 접근 방식이 필요합니다. ORDER BY와 함께 하위 쿼리를 사용하는 매력에도 불구하고 MySQL의 최적화 프로그램은 이를 존중하지 않을 수 있습니다.
더 신뢰할 수 있는 접근 방식은 다음과 같습니다.
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
이 쿼리는 DISTINCT ON을 만족하는 첫 번째 발견된 행을 찾습니다. 상관 하위 쿼리를 사용하여 각각에 대한 최소 col4 값을 검색하여 Postgresql의 기준 group.
결론
Postgresql의 DISTINCT ON 쿼리에는 MySQL에 직접 대응되는 쿼리가 없지만 해결 방법이 있습니다. 접근 방식 선택은 특정 쿼리와 원하는 복잡성 수준에 따라 다릅니다.
위 내용은 MySQL에서 Postgresql의 DISTINCT ON 기능을 어떻게 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!