Подтвердить что ты не робот

ОГРАНИЧЕНИЕ SQL JOIN

Я пытаюсь ограничить следующий оператор SQL.

SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id

То, что я хочу сделать, ограничено числом "родительских" строк. IE. если я сделаю LIMIT 1, я получаю только одну статью расходов, но все равно получаю все связанные с ней транзакции.

Как это будет достигнуто?

На этом этапе, если я делаю LIMIT 1, я получаю один расход и только одну транзакцию.

4b9b3361

Ответ 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)

Будет ли это делать то, что вы хотели? Очевидно, что вам нужно быть осторожным в отношении того, какой заказ ваши расходы будут возвращаться, поэтому вы, вероятно, захотите использовать ORDER BY.

Изменить: учитывая ограничение MySQL, описанное в вашем комментарии ниже, возможно, это сработает:

select * from (select id from expense order by WHATEVER limit 1) as t1, transaction where expense_id=transaction_expense_id;

Бен

Ответ 2

Вам нужно указать, какой элемент расход вы хотите получить. Самое дорогое? Новейший? Затем присоединитесь к подзапросу, который возвращает только это:

SELECT
    expense.*, transaction.*, user.*
FROM
    (SELECT * FROM expense WHERE ...) AS expense
INNER JOIN
    transaction ON expense_id = transaction_expense_id

Ответ 3

Поскольку обновление SQL-сервера не является вариантом, я могу завершить два запроса.

expenses = SELECT * FROM expense ... LIMIT x
foreach expenses as expense
    expense.transactions = SELECT * FROM transacion WHERE transaction_expense_id = expense.expense_id