본문 바로가기
MySql

MySQL mysql 5.6에 ANY_VALUE 기능이 있습니까?

by 베이스 공부 2020. 11. 7.
반응형

현재 개발 중에는 mysql 5.7, 프로덕션에서는 5.6으로 작업 중입니다. 개발중인 그룹으로 쿼리를 실행할 때마다 "오류 코드 : 1055. SELECT 목록의 표현식 # 1이 GROUP BY에 없습니다"와 같은 오류가 발생합니다.

다음은 쿼리입니다.

SELECT c.id, c.name, i.* 
 FROM countries c, images i 
WHERE i.country_id = c.id
GROUP BY c.id; Fixed for 5.7; 

SELECT c.id, c.name,
       ANY_VALUE(i.url) url, 
       ANY_VALUE(i.lat) lat, 
       ANY_VALUE(i.lng) lng 
  FROM countries c, images i
 WHERE i.country_id = c.id
 GROUP BY c.id;

이를 해결하기 위해 5.7 ANY_VALUE의 mysql 함수를 사용하지만 주요 문제는 mysql 5.6에서 사용할 수 없다는 것입니다.

따라서 개발 용 SQL 문을 수정하면 프로덕션에서 오류가 발생합니다.

mysql 5.6의 ANY_VALUE 함수에 대한 솔루션이나 정책을 알고 있습니까?

 

해결 방법

 



  SET @mode := @@SESSION.sql_mode;
  SET SESSION sql_mode = '';
  /* your query here */
  SET SESSION sql_mode = @mode;

이렇게하면 MySQL이 쿼리를 수락 할 수 있습니다.

하지만보세요, 귀하의 쿼리가 실제로 올바르지 않습니다. 실행하도록 설득 할 수 있으면 images 테이블에서 임의로 선택된 행을 반환합니다. 이러한 종류의 불확실성은 종종 사용자와 기술 지원 팀에게 혼란을 야기합니다.

쿼리를 개선하여 특정 이미지를 선택하는 것은 어떻습니까? images 테이블에 자동 증가 id 열이있는 경우이 작업을 수행하여 "첫 번째"이미지를 선택할 수 있습니다.

SELECT c.id, c.name, i.*
  FROM countries c
  LEFT JOIN (
       SELECT MIN(id) id, country_id
         FROM images
        GROUP BY country_id
       ) first ON c.id = first.country_id
  LEFT JOIN images i ON first.id = i.id

그러면 예측 가능한 이미지가 표시된 국가 당 하나의 행이 반환됩니다.

 

참조 페이지 https://stackoverflow.com/questions/37089347

 

 

반응형

댓글