Begrenzen einer SQL JOIN
Frage
Ich versuche, die folgende SQL-Anweisung zu begrenzen.
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
Was ich tun möchte, ist die Anzahl der ‚Eltern‘ Zeilen begrenzen. IE. wenn ich eine LIMIT 1 zu tun, würde ich nur eine Aufwandsposition erhalten, aber immer noch alle Transaktionen erhalten mit ihr verbunden sind.
Wie würde dies erreicht werden?
In diesem Stadium, wenn ich LIMIT tun 1, erhalte ich einen Aufwand, und nur eine Transaktion.
Lösung
So gehen wir davon aus, die Benutzertabelle ausschließen kann, ist es neu geschrieben werden könnte, wie:
select * from expense, transaction where expense_id = transaction_expense_id
Nun, wenn Sie eine Grenze anwenden möchten, können Sie es wie folgt tun könnte:
select * from expense, transaction where expense_id = transaction_expense_id and
expense_id in (select expense_id from expense limit 1)
Wäre das tun, was Sie wollen? Natürlich müssen Sie vorsichtig sein, was bestellen Sie Ihre expense_ids wieder in kommen werden, so möchten Sie wahrscheinlich ORDER BY was auch immer verwenden.
Edit: Da die MySQL Einschränkung unten in Ihrem Kommentar beschrieben, vielleicht wird diese Arbeit:
select * from (select id from expense order by WHATEVER limit 1) as t1, transaction where expense_id=transaction_expense_id;
Ben
Andere Tipps
Sie müssen angeben, auf die Kosten Artikel Sie erhalten möchten. Das teuerste? Das Neueste? Dann treten Sie gegen eine Unterabfrage, die nur zurückgibt, dass:
SELECT
expense.*, transaction.*, user.*
FROM
(SELECT * FROM expense WHERE ...) AS expense
INNER JOIN
transaction ON expense_id = transaction_expense_id
Da die SQL-Server-Upgrade ist keine Option, kann ich zwei Abfragen am Ende tut.
expenses = SELECT * FROM expense ... LIMIT x
foreach expenses as expense
expense.transactions = SELECT * FROM transacion WHERE transaction_expense_id = expense.expense_id