LIMITER un SQL JOIN
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.
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