맨 왼쪽 테이블의 모든 행에 대해 맨 오른쪽 테이블에서 하나의 행만 반환
테이블이 두 개 있습니다.가장 왼쪽 테이블의 각 레코드마다 오른쪽 테이블의 레코드가 하나씩만 반환되는 방식으로 그들과 함께 하고 싶습니다.아래에 예시를 넣었습니다.실제 데이터가 약 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
이것은 적어도 하나의 트랜잭션 기록을 가지고 있는 사용자만 반환합니다.지원 기록이 없는 사용자뿐만 아니라 지원 기록이 없는 사용자를 보려면 다음을 사용합니다.
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
반환되는 특정 행에 관심이 없는 경우.
select id, name, spent
from users
left join transactions on users.id = transactions.uid
group by id
이렇게 하면 사용자당 하나의 행이 반환됩니다.그것은 첫번째 일치된 거래가 될 것입니다.
이것이 실제로 당신의 질문에 대답하지 않는다면 죄송합니다.어떤 사용자가 적어도 하나 이상의 트랜잭션을 가지고 있는지 확인하려는 것 같습니다.이 과정에서 각 사용자가 다음과 같은 작업을 수행하여 지출한 금액을 확인할 수 있습니다.
선택한다.u.id ,u.name ,합계(t.spent)부터사용자 u내부 결합 트랜잭션 tOn t.uid = u.id그룹화 기준u.id, u.name
언급URL : https://stackoverflow.com/questions/3313614/return-only-one-row-from-the-right-most-table-for-every-row-in-the-left-most-tab
'programing' 카테고리의 다른 글
WordPress - 오류 로그 타임스탬프 시간대를 로컬로 설정하려면 어떻게 해야 합니까? (0) | 2023.10.24 |
---|---|
노드 MySQL 이스케이프 LIKE 문 (0) | 2023.10.24 |
문자열 비교 시 악센트가 있는 문자 무시 (0) | 2023.10.24 |
CSS의 비율에 따라 색상을 더 밝게 또는 더 어둡게 동적으로 변경 (0) | 2023.10.24 |
Visual Studio에서 디버깅하는 동안 Chrome 브라우저가 .css 파일을 강제로 다시 로드하도록 하는 방법은 무엇입니까? (0) | 2023.10.24 |