限制SQL JOIN

Tho*_*s R 22 sql database join sql-limit

我试图限制以下SQL语句.

SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
Run Code Online (Sandbox Code Playgroud)

我想做的是限制'父'行的数量.IE浏览器.如果我做LIMIT 1,我只会收到一个费用项目,但仍会获得与之相关的所有交易.

这将如何实现?

在这个阶段,如果我做LIMIT 1,我得到一笔费用,只有一笔交易.

Ben*_*Ben 12

因此,假设我们可以排除用户表,可以将其重写为:

select * from expense, transaction where expense_id = transaction_expense_id
Run Code Online (Sandbox Code Playgroud)

现在,如果您想应用限制,您可以这样做:

select * from expense, transaction where expense_id = transaction_expense_id and 
  expense_id in (select expense_id from expense limit 1)
Run Code Online (Sandbox Code Playgroud)

那会做你想要的吗?显然,您需要谨慎处理您的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;
Run Code Online (Sandbox Code Playgroud)


Dav*_*itt 9

您必须指定要获得的费用项目.最昂贵的?最新的?然后加入一个仅返回的子查询:

SELECT
    expense.*, transaction.*, user.*
FROM
    (SELECT * FROM expense WHERE ...) AS expense
INNER JOIN
    transaction ON expense_id = transaction_expense_id
Run Code Online (Sandbox Code Playgroud)