programing

MySQL에서 JOIN 쿼리의 반환 결과를 제한하는 방법

powerit 2023. 11. 4. 13:20
반응형

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

반응형