我试图限制下面的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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top