ОГРАНИЧЕНИЕ SQL JOIN
Я пытаюсь ограничить следующий оператор SQL.
SELECT expense.*, transaction.* FROM expense
INNER JOIN transaction ON expense_id = transaction_expense_id
То, что я хочу сделать, ограничено числом "родительских" строк. IE. если я сделаю LIMIT 1, я получаю только одну статью расходов, но все равно получаю все связанные с ней транзакции.
Как это будет достигнуто?
На этом этапе, если я делаю LIMIT 1, я получаю один расход и только одну транзакцию.
Ответы
Ответ 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