Limiter une jointure SQL
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 'parents'. IE. si je fais une limite 1, Je ne recevrais qu'un seul élément de dépense, mais je recevrais toujours toutes les transactions qui y sont associées.
Comment cela serait-il réalisé?
À ce stade, si je limite 1, je reçois une dépense, et une seule transaction.
3 réponses
Donc, en supposant que nous pouvons exclure la table utilisateur, elle pourrait être réécrite comme:
select * from expense, transaction where expense_id = transaction_expense_id
Maintenant, si vous voulez appliquer une limite, vous pouvez le faire comme ceci:
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 être prudent sur l'ordre dans lequel vos expense_ids vont revenir, donc vous voulez probablement utiliser ORDER BY whatever.
Edit: compte tenu de la limitation MySQL décrite dans votre commentaire ci-dessous, peut-être que cela fonctionnera:
select * from (select id from expense order by WHATEVER limit 1) as t1, transaction where expense_id=transaction_expense_id;
Ben
, Vous aurez à spécifier dépense élément que vous souhaitez obtenir. Le plus cher? Le plus récent? Ensuite, Joignez-vous à 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
Puisque la mise à niveau du serveur SQL n'est pas une option, je peux finir 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