테이블 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는 중복된 데이터를 피하고 조건의 최신 데이터를 조회하기 위해서 입니다.
@fhteprhd
실수입니다. 다른 쿼리문을 붙였네요.
@변종원(웅파)
GROUP BY를 빼면 2020-05-01와 2019-01-07의 데이터가 같이 조회됩니다. C.c_date < '2021-01-13' AND B.b_date < '2021-01-13'에 해당하는 조건의 가장 최신 데이터들을 조회하려고 합니다.
join 을 처음부터 하나하나 해보셔야 할거 같은데요.
내가 생각한대로 join이 이루어졌는지..
GROUP BY는 중복을 없애고 최신데이터를 가져오는게 아님니다.
어떤 데이터에 대한 최신값을 원하는지 없네요. 쿼리를 다시한번 확인해보세요. 뭐에 대해 구하고있는지
올려주신 SQL 쿼리는 GROUP BY를 잘 못 사용하고 있는 대표적인 사례입니다.
MYSQL의 버그(의도적인?)
아, 제가 실수로 ORDER BY를 생략했네요.
위의 쿼리에 ORDER BY C.c_date desc, B.b_date desc를 추가해도 변화가 없는데, 구글링해보니 서브쿼리를 이용하라는데 한 번 해봐야겠네요.
제가 잘몰라서 물어보는데
ORDER BY _CHULGO_HISTORY.CH_chulgo_date DESC, _GONGSI_HISTORY.GH_gongsi_date DESC
이건 뭐죠??