MySQL에서 JOIN 쿼리의 반환 결과를 제한하는 방법
저는 다음 SQL 문을 제한하려고 합니다.
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
제가 하고 싶은 일은 '부모' 행의 수를 제한하는 것입니다.즉, LIMIT 1을 하면 비용 항목을 하나만 받지만, 관련된 모든 거래를 받을 수 있습니다.
이것은 어떻게 이루어집니까?MySQL 5.0을 사용하고 있습니다.
이 단계에서 LIMIT 1을 하면 비용은 1개, 거래는 1개가 됩니다.
따라서 사용자 테이블을 제외할 수 있다고 가정하면 다음과 같이 다시 쓸 수 있습니다.
select * from expense, transaction where expense_id = transaction_expense_id
이제 제한을 적용하려면 다음과 같이 할 수 있습니다.
select * from expense, transaction where expense_id = transaction_expense_id and
expense_id in (select expense_id from expense limit 1)
그게 당신이 원하는 대로 될까요?분명 당신은 당신의 경비 ID가 어떤 순서로 다시 들어올 것인지에 대해 조심해야 할 필요가 있기 때문에, 당신은 아마 ORDER를 어떻게든 사용하고 싶을 것입니다.
편집: 아래 주석에 설명된 MySQL 제한을 고려하면 다음과 같이 작동할 수 있습니다.
select * from (select id from expense order by WHATEVER limit 1) as t1, transaction where expense_id=transaction_expense_id;
벤
당신이 원하는 경비 항목을 지정해야 할 것입니다.제일 비싸요?최신형?다음 항목만 반환하는 하위 쿼리에 대해 가입합니다.
SELECT
expense.*, transaction.*, user.*
FROM
(SELECT * FROM expense WHERE ...) AS expense
INNER JOIN
transaction ON expense_id = transaction_expense_id
SQL 서버 업그레이드는 옵션이 아니기 때문에 두 가지 쿼리를 수행하게 될 수도 있습니다.
expenses = SELECT * FROM expense ... LIMIT x
foreach expenses as expense
expense.transactions = SELECT * FROM transacion WHERE transaction_expense_id = expense.expense_id
비록 이게 오래된 일이긴 하지만...검색에서 이 사실을 발견했고 서브쿼리에서 제한을 사용할 수 없는 점을 고려하여 몇 가지 생각을 더 해볼까 생각했습니다.
select e.expense_id, transaction.*
from (select max(expense_id) from expense) e
inner join transaction t ON e.expense_id = t.transaction_expense_id
또는 모든 열을 원하는 경우expense
뿐만 아니라expense_id
서브쿼리를 둥지를 틀 수 있습니다.
select e.*, t.*
from (
select e1.*
from expense e1 inner join (select max(expense_id) from expense) e2
on e1.expense_id = e2.expense_id
) e inner join transaction t on e.expense_id = t.transaction_expense_id
언급URL : https://stackoverflow.com/questions/494974/how-to-limit-returned-results-of-a-join-query-in-mysql
'programing' 카테고리의 다른 글
기본 게시물의 영구 링크를 변경하는 방법? (0) | 2023.11.04 |
---|---|
C Macro - 정수 값을 문자열 리터럴로 가져오는 방법 (0) | 2023.11.04 |
Oracle LOB를 삭제하는 방법 (0) | 2023.11.04 |
오류 ORA-01804 텍스트를 검색하는 중 오류 발생 (0) | 2023.10.30 |
도커 컨테이너에 여러 볼륨을 탑재하시겠습니까? (0) | 2023.10.30 |