题
我试图限制下面的SQL语句。
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
我想要做什么,是限制“父”的行数。 IE浏览器。如果我做了限制1,我会收到只有一个支出项目,但仍获得与之相关的所有事务。
将如何实现这一目标?
在这个阶段,如果我做LIMIT 1,我得到一个费用的,只有一个事务。
解决方案
因此,假设我们可以排除用户表,它可被重写为:
select * from expense, transaction where expense_id = transaction_expense_id
现在,如果你想申请的限制,你可以做这样的:
select * from expense, transaction where expense_id = transaction_expense_id and
expense_id in (select expense_id from expense limit 1)
但愿你想要什么?显然,你需要谨慎对待什么样的顺序您expense_ids要回来,所以你可能想使用ORDER BY什么的。
编辑:鉴于下面您的评论描述MySQL的限制,也许这将工作:
select * from (select id from expense order by WHATEVER limit 1) as t1, transaction where expense_id=transaction_expense_id;
本
其他提示
您需要指定它的费用项目要得到。最昂贵的?最新的?然后加入针对仅一个返回的子查询:
SELECT
expense.*, transaction.*, user.*
FROM
(SELECT * FROM expense WHERE ...) AS expense
INNER JOIN
transaction ON expense_id = transaction_expense_id
由于升级的SQL服务器不是一个选项,我可能最终会做两个查询。
expenses = SELECT * FROM expense ... LIMIT x
foreach expenses as expense
expense.transactions = SELECT * FROM transacion WHERE transaction_expense_id = expense.expense_id
不隶属于 StackOverflow