LIMITARE un JOIN SQL
Domanda
Sto cercando di limitare la seguente istruzione SQL.
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
Quello che voglio fare è limitare il numero di righe 'parent'. IE. se faccio un LIMIT 1, riceverei solo una voce di spesa, ma ricevo comunque tutte le transazioni ad essa associate.
Come sarebbe possibile raggiungere questo obiettivo?
In questa fase, se faccio LIMIT 1, ottengo una spesa e una sola transazione.
Soluzione
Quindi supponendo che possiamo escludere la tabella degli utenti, potrebbe essere riscritta come:
select * from expense, transaction where expense_id = transaction_expense_id
Ora se vuoi applicare un limite, puoi farlo in questo modo:
select * from expense, transaction where expense_id = transaction_expense_id and
expense_id in (select expense_id from expense limit 1)
Farebbe quello che volevi? Ovviamente devi essere cauto sull'ordine in cui torneranno i tuoi soldi, quindi probabilmente vorrai usare ORDER BY qualunque.
Modifica: vista la limitazione di MySQL descritta nel tuo commento qui sotto, forse funzionerà:
select * from (select id from expense order by WHATEVER limit 1) as t1, transaction where expense_id=transaction_expense_id;
Ben
Altri suggerimenti
Dovrai specificare quale spesa vuoi ottenere. Il più costoso? Il più recente? Quindi unisciti a una subquery che restituisce solo questo:
SELECT
expense.*, transaction.*, user.*
FROM
(SELECT * FROM expense WHERE ...) AS expense
INNER JOIN
transaction ON expense_id = transaction_expense_id
Poiché l'aggiornamento del server SQL non è un'opzione, potrei finire per fare due query.
expenses = SELECT * FROM expense ... LIMIT x
foreach expenses as expense
expense.transactions = SELECT * FROM transacion WHERE transaction_expense_id = expense.expense_id