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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top