본문 바로가기
MySql

MySQL INNER JOIN select only one row from second table

by 베이스 공부 2021. 1. 27.
반응형

users 테이블과 payments 테이블이 있습니다. 각 사용자에 대해 결제가있는 사용자는 payments 테이블에 여러 개의 관련 결제가있을 수 있습니다. . 결제가있는 모든 사용자를 선택하고 최근 결제 만 선택하고 싶습니다. 이 SQL을 시도하고 있지만 이전에 중첩 SQL 문을 시도한 적이 없으므로 내가 뭘 잘못하고 있는지 알고 싶습니다. 도움을 주셔서 감사합니다

SELECT u.* 
FROM users AS u
    INNER JOIN (
        SELECT p.*
        FROM payments AS p
        ORDER BY date DESC
        LIMIT 1
    )
    ON p.user_id = u.id
WHERE u.package = 1

 

해결 방법

 

사용자 ID 별로 최신 날짜를 가져 오려면 하위 쿼리가 있어야합니다.

SELECT  a.*, c.*
FROM users a 
    INNER JOIN payments c
        ON a.id = c.user_ID
    INNER JOIN
    (
        SELECT user_ID, MAX(date) maxDate
        FROM payments
        GROUP BY user_ID
    ) b ON c.user_ID = b.user_ID AND
            c.date = b.maxDate
WHERE a.package = 1

 

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

 

 

반응형

댓글