본문 바로가기
MySql

MySQL 맨 왼쪽 테이블의 모든 행에 대해 맨 오른쪽 테이블에서 하나의 행만 반환

by 베이스 공부 2020. 11. 16.
반응형

두 개의 테이블이 있습니다. 가장 왼쪽 테이블의 각 레코드에 대해 오른쪽 테이블의 하나의 레코드 만 반환되는 방식으로 이들을 조인하고 싶습니다. 아래에 예를 포함했습니다. 실제 데이터가 약 4M 행이므로 하위 쿼리 및 임시 테이블을 피하고 싶습니다. 또한 하나 또는 아무것도 일치하지 않는 한 맨 오른쪽 테이블의 어떤 레코드가 일치하는지 상관하지 않습니다. 감사!

테이블 사용자 :

-------------
| id | name |
-------------
| 1  | mike |
| 2  | john |
| 3  | bill |
-------------

테이블 트랜잭션 :

---------------
| uid | spent | 
---------------
| 1   | 5.00  |
| 1   | 5.00  |
| 2   | 5.00  |
| 3   | 5.00  |
| 3   | 10.00 |
---------------

예상 출력 :

---------------------
| id | name | spent |
---------------------
| 1  | mike | 5.00  |
| 2  | john | 5.00  |
| 3  | bill | 5.00  |
---------------------

 

해결 방법

 

사용하다:

  SELECT u.id,
         u.name,
         MIN(t.spent) AS spent
    FROM USERS u
    JOIN TRANSACTIONS t ON t.uid = u.id
GROUP BY u.id, u.name

이렇게하면 TRANSACTIONS 레코드가 하나 이상있는 사용자 만 반환됩니다. 지원 기록이없는 사용자와 지원 기록이없는 사용자를 보려면 다음을 사용하십시오.

   SELECT u.id,
          u.name,
          COALESCE(MIN(t.spent), 0) AS spent
     FROM USERS u
LEFT JOIN TRANSACTIONS t ON t.uid = u.id
 GROUP BY u.id, u.name

 

참조 페이지 https://stackoverflow.com/questions/3313614

 

 

반응형

댓글