我正在尝试限制以下的SQL语句。
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
我想要做的是限制“父”行的数量。例如,如果我使用LIMIT 1,则只会收到一个费用项目,但仍会获得与其关联的所有交易。
如何实现这一点?我正在使用MySQL 5.0。
目前,如果我使用LIMIT 1,我只会得到一个费用和一个交易。
我正在尝试限制以下的SQL语句。
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
假设我们可以排除用户表,那么它可以重写为:
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
WHERE ... LIMIT 10) AS expense
。我想是这样。 - Timmmm由于升级SQL服务器不是一个选项,我可能最终会执行两个查询。
expenses = SELECT * FROM expense ... LIMIT x
foreach expenses as expense
expense.transactions = SELECT * FROM transacion WHERE transaction_expense_id = expense.expense_id
尽管这是旧的......在搜索中遇到了这个,我想加入一些想法,考虑到无法在子查询中使用limit...
select e.expense_id, transaction.*
from (select max(expense_id) from expense) e
inner join transaction t ON e.expense_id = t.transaction_expense_id
或者如果您想从expense
中获取所有列而不仅仅是expense_id
,您可以嵌套子查询。
select e.*, t.*
from (
select e1.*
from expense e1 inner join (select max(expense_id) from expense) e2
on e1.expense_id = e2.expense_id
) e inner join transaction t on e.expense_id = t.transaction_expense_id