Postgresql의 SELECT DISTINCT ON을 MySQL로 변환
Postgresql에서 MySQL로 마이그레이션할 때 Postgresql의 SELECT DISTINCT를 활용하여 쿼리를 변환해야 할 수도 있습니다. MySQL에 대한 ON 문
Postgresql의 SELECT DISTINCT ON
Postgresql에서 SELECT DISTINCT ON은 지정된 열의 고유한 조합을 기반으로 중복 행을 제거하는 데 사용됩니다. 일치하는 모든 행을 제거하고 각각의 개별 조합에 대해 "첫 번째" 행만 유지합니다.
GROUP BY에 대한 MySQL 확장
MySQL에는 SELECT와 정확히 일치하는 행이 없습니다. 구별됨. 대신, GROUP BY 절에 이름이 지정되지 않은 경우에도 집계되지 않은 열을 선택할 수 있도록 하는 GROUP BY 확장을 사용합니다. 그러나 각 그룹에서 어떤 값을 선택하는지는 예측할 수 없습니다. 따라서 잠재적으로 MySQL에서 GROUP BY를 사용하여 유사한 효과를 얻을 수 있습니다.
SELECT col4, col5 FROM tablename GROUP BY col1, col2, col3;
이 쿼리는 각 (col1, col2, col3) 조합에 대해 "첫 번째" 행을 반환하지만 특정 순서는 이 행은 확정되지 않았습니다.
행 순서 유지
다음으로 반환되는 행의 순서를 지정하려면 하위 쿼리를 사용할 수 있습니다.
SELECT col4, col5 FROM ( SELECT col1, col2, col3, col4, col5 FROM tablename ORDER BY col1, col2, col3, col4 ) s GROUP BY col1, col2, col3;
이 접근 방식이 논리적으로 보이지만 MySQL은 여전히 col4 및 col5에 대해 임의의 값을 선택할 수 있는 재량권을 갖습니다. 예상되는 행 순서를 보장하려면 더 복잡한 쿼리가 필요합니다.
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;
결론
Postgresql의 SELECT DISTINCT ON을 MySQL로 직접 변환할 수는 없지만, GROUP BY 및 하위 쿼리를 사용하는 해결 방법은 원하는 기능을 제공합니다. 그러나 결과 MySQL 쿼리는 Postgresql 쿼리보다 더 복잡할 수 있습니다.
위 내용은 MySQL에서 Postgresql의 SELECT DISTINCT ON을 복제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!