PostgreSQL에서 MySQL로 DISTINCT ON 쿼리 변환
PostgreSQL에서 MySQL로 전환하는 동안 사용자는 제거 구문에 차이가 있을 수 있습니다. 특정 열 값을 기반으로 행을 복제합니다. PostgreSQL은 SELECT DISTINCT ON 문을 사용하는 반면 MySQL은 GROUP BY 절의 확장을 사용합니다.
PostgreSQL의 SELECT DISTINCT ON
SELECT DISTINCT ON(col1, col2, col3) PostgreSQL의 쿼리는 지정된 열의 각 고유 조합에 대해 첫 번째 한정 행을 유지합니다. 예를 들어 다음 테이블을 고려해 보세요.
col1 | col2 | col3 | col4 | col5 |
---|---|---|---|---|
1 | 2 | 3 | 777 | 888 |
1 | 2 | 3 | 888 | 999 |
3 | 3 | 3 | 555 | 555 |
쿼리 결과는 다음과 같습니다.
col4 | col5 |
---|---|
777 | 888 |
555 | 555 |
MySQL의 GROUP BY 확장
MySQL 확장 GROUP BY 절에 포함되지 않은 경우에도 집계되지 않은 열을 선택할 수 있습니다. 그러나 서버는 각 그룹에 대해 이러한 열에서 임의의 값을 선택할 수 있습니다.
동등한 MySQL 쿼리
PostgreSQL 예에 해당하는 MySQL 쿼리는 다음과 같습니다.
SELECT col4, col5 FROM tablename GROUP BY col1, col2, col3;
PostgreSQL과 MySQL은 모두 각(col1, col2, col3) 조합에 대해 하나의 행을 반환하지만 반환된 특정 행은 명시적인 순서가 없기 때문에 다를 수 있습니다.
정렬된 쿼리에 대한 해결 방법
PostgreSQL의 정렬된 DISTINCT ON 동작을 모방하려면 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;
결론
MySQL에는 Postgresql의 SELECT DISTINCT ON에 대한 정확한 대응 기능이 없지만 GROUP BY 확장과 관련된 해결 방법은 유사한 기능을 제공할 수 있습니다. 해결 방법의 복잡성은 쿼리 요구 사항에 따라 달라질 수 있습니다.
위 내용은 PostgreSQL의 SELECT DISTINCT ON 쿼리를 MySQL로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!