| 제목 | 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
이건 뭐죠??