Question

J'essaie de limiter l'instruction SQL suivante.

SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id

Ce que je veux faire, c'est limiter le nombre de lignes "parent". C'EST À DIRE. si je fais un LIMIT 1, je ne recevrais qu’un seul poste de dépense, mais toutes les transactions qui y sont associées sont tout de même associées.

Comment cela serait-il réalisé?

À ce stade, si je limite 1, je reçois une dépense et une seule transaction.

Était-ce utile?

La solution

En supposant que nous puissions exclure la table utilisateur, elle pourrait être réécrite comme suit:

select * from expense, transaction where expense_id = transaction_expense_id

Maintenant, si vous souhaitez appliquer une limite, vous pouvez le faire comme suit:

select * from expense, transaction where expense_id = transaction_expense_id and 
  expense_id in (select expense_id from expense limit 1)

Est-ce que ça ferait ce que tu voulais? Évidemment, vous devez faire preuve de prudence quant à l'ordre dans lequel vos articles dépensés vont revenir, de sorte que vous souhaiterez probablement utiliser ORDER BY, peu importe.

Modifier: Compte tenu de la limitation MySQL décrite dans votre commentaire ci-dessous, cela fonctionnera peut-être:

select * from (select id from expense order by WHATEVER limit 1) as t1, transaction where expense_id=transaction_expense_id;

Ben

Autres conseils

Vous devrez spécifier quel élément dépense vous souhaitez obtenir. Le plus cher? Le plus récent? Joignez-vous ensuite à une sous-requête qui ne renvoie que cela:

SELECT
    expense.*, transaction.*, user.*
FROM
    (SELECT * FROM expense WHERE ...) AS expense
INNER JOIN
    transaction ON expense_id = transaction_expense_id

La mise à niveau du serveur SQL n'étant pas une option, il est possible que je finisse par faire deux requêtes.

expenses = SELECT * FROM expense ... LIMIT x
foreach expenses as expense
    expense.transactions = SELECT * FROM transacion WHERE transaction_expense_id = expense.expense_id
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top