개발 Q&A

제목 MySQL 정렬 후 문제
카테고리 DB
글쓴이 주말생각 작성시각 2021/01/13 11:21:32
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 7061   RSS

테이블 A, B, C, D를 조인하여 출력하는데 ORDER BY 컬럼(DATE) DESC를 적용해도 가장 최근 날짜가 조회되지 않습니다.

예제 테이블

테이블 A

컬럼 id(PK : INT), m_Name(VARCHAR)

테이블 B

컬럼: B_id(PK : INT), a_id(FK : INT), d_id(FK : INT), b_Num(INT), b_date(DATE)

테이블 C

컬럼: C_id(PK : INT), a_id(FK : INT), c_Num(INT), c_date(DATE)

테이블 D

컬럼: D_id(PK : INT), d_title(VARCHAR)

 

예제 쿼리는 아래와 같습니다.

SELECT  D.d_title, C.c_Num, C.c_date, B.b_Num, B.b_date

FROM A

JOIN  B ON B.a_id = A.id

JOIN  C ON C.a_id = A.id

JOIN  D ON D.D_id = B.d_id

WHERE A.id = '1234'

AND C.c_date < '2021-01-13' AND B.b_date < '2021-01-13'

GROUP BY D.d_title

위와 같이 조회하면 C.c_date는 2020-05-01이 아니라 2019-01-07이 나옵니다. C.c_Num의 값도 2020-05-01 기준의 값으로 나오고요.

-> GROUP BY D.d_title는 중복된 데이터를 피하고 조건의 최신 데이터를 조회하기 위해서 입니다.

 

 다음글 날짜 선택에 제한을 둘때 (5)
 이전글 MySQL 특정 컬럼의 개별 값들의 갯수 구하기 (2)

댓글

fhteprhd / 2021/01/13 11:56:01 / 추천 0

제가 잘몰라서 물어보는데 

ORDER BY _CHULGO_HISTORY.CH_chulgo_date DESC, _GONGSI_HISTORY.GH_gongsi_date DESC

이건 뭐죠??

주말생각 / 2021/01/13 12:01:06 / 추천 0

@fhteprhd

실수입니다. 다른 쿼리문을 붙였네요.

변종원(웅파) / 2021/01/13 12:24:02 / 추천 0
GROUP BY 빼보세요.
주말생각 / 2021/01/13 13:04:54 / 추천 0

@변종원(웅파)

GROUP BY를 빼면 2020-05-01와 2019-01-07의 데이터가 같이 조회됩니다. C.c_date < '2021-01-13' AND B.b_date < '2021-01-13'에 해당하는 조건의 가장 최신 데이터들을 조회하려고 합니다.

PureAni / 2021/01/13 13:08:46 / 추천 0

join 을 처음부터 하나하나 해보셔야 할거 같은데요.

내가 생각한대로 join이 이루어졌는지..

fhteprhd / 2021/01/13 13:19:15 / 추천 0

GROUP BY는 중복을 없애고 최신데이터를 가져오는게 아님니다.

어떤 데이터에 대한 최신값을 원하는지 없네요. 쿼리를 다시한번 확인해보세요. 뭐에 대해 구하고있는지

한대승(불의회상) / 2021/01/13 14:37:49 / 추천 0

올려주신 SQL 쿼리는 GROUP BY를 잘 못 사용하고 있는 대표적인 사례입니다.

MYSQL의 버그(의도적인?)

주말생각 / 2021/01/13 17:41:09 / 추천 0

아, 제가 실수로 ORDER BY를 생략했네요.

위의 쿼리에 ORDER BY C.c_date desc, B.b_date desc를 추가해도 변화가 없는데, 구글링해보니 서브쿼리를 이용하라는데 한 번 해봐야겠네요.