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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top