제목 | MySQL 정렬 후 문제 | ||
---|---|---|---|
카테고리 | DB | ||
글쓴이 | 주말생각 | 작성시각 | 2021/01/13 11:21:32 |
|
|||
테이블 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
|
주말생각
/
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를 추가해도 변화가 없는데, 구글링해보니 서브쿼리를 이용하라는데 한 번 해봐야겠네요. |
제가 잘몰라서 물어보는데
ORDER BY _CHULGO_HISTORY.CH_chulgo_date DESC, _GONGSI_HISTORY.GH_gongsi_date DESC
이건 뭐죠??