mysql 구버전에서는 실행되던 쿼리가
mysql8버전에서는 오류가 발생하였습니다.
해당 오류는
ORDER BY clause is not in SELECT list, references column 'DB명.테이블명.no' which is not in SELECT list; this is incompatible with DISTINCT
입니다.
select 문에 없는 컬럼을 order문에서 사용하게되어 문제가 되는것 같은데
select distinct adddate from tb_landcom order by adddate desc
로 했을 경우 쿼리는 정상적으로 실행은 되지만 제가 원하는 형태로 나오지 않아
사용하기가 힘드네요
기존에 사용하던 쿼리의 경우 데이터를 출력하면
no adddate
10 AUTO_날짜_1
9 AUTO_날짜_2
8 AUTO_날짜_3
요러한 형태로 최근에 등록된 데이터가 no를 기준으로 내림차순으로 정렬이 됩니다.
select distinct adddate from tb_landcom order by adddate desc
이 쿼리로 했을 경우에는
no adddate
10 AUTO_날짜_1
9 AUTO_날짜_1
8 AUTO_날짜_1
7 AUTO_날짜_2
6 AUTO_날짜_2
5 AUTO_날짜_2
중복값이 제외되지 않고 출력되는 형태로 나와버립니다.
해당 오류에 대해 검색 및 해결방안을 찾지 못해 글을 올리게 되었습니다.
제가 생각하는 오류가 맞는지 그리고 어떤형태 또는 함수를 사용해야 기존형태처럼 데이터를 출력 할수
있을까요?
옛날구버전만 사용하다 mysql8로 넘어오니 은근 어렵네요
기존 쿼리가 표준에 어긋나는 쿼리였고
새로운 서버의 설정이 표준을 따라야만 하는 설정이라면? (SQL_MODE = ONLY_FULL_GROUP_BY)
오류가 날 수 있습니다.
기존 쿼리가 여러개의 no 중에 어떤걸 가져와야 할지 명확하지 않습니다.
아무거나 가져와 조회하는 의미가 있습니다. (비표준, 권장하지 않음)
-- 1. 설정을 끄는 방법 : 권장하지 않음 -- 2. 아무거나 가져오게 하는 방안 (애매함, 기존 쿼리와 유사함) SELECT ANY_VALUE(no) no , adddate FROM tb_landcom GROUP BY adddate ORDER BY no DESC ; -- 3. MIN/MAX 등 사용 : 아무거나가 아닌 정확한 규칙 지정 (그나마 명확함) SELECT MAX(no) no , adddate FROM tb_landcom GROUP BY adddate ORDER BY no DESC ;