У меня проблема, похожая на LIMITing a SQL JOIN, но с немного более сложным требованием.ОГРАНИЧИТЬ SQL JOIN, с условиями JOIN
Я хочу искать для пользователей и связанных с ними сделок, которые лежат в диапазоне времени:
SELECT u.*, t.*
FROM User u
JOIN Transaction t ON t.user_id = u.id
WHERE t.timestamp >= ? and t.timestamp <= ?;
До сих пор, так хорошо. Теперь я хочу повторить запрос, но с LIMIT количеством возвращаемых пользователей. Однако не должно быть ограничений на количество транзакций, возвращенных данному пользователю.
Если я следовать подходу, предложенному в другом вопросе, это означало бы в:
SELECT u.*, t.*
FROM (SELECT * FROM User LIMIT 10) u
JOIN Transaction t ON t.user_id = u.id
WHERE t.timestamp >= ? and t.timestamp <= ?;
Это не будет производить то, что я хочу: это будет возвращать первые 10 пользователей, которые могут не иметь каких-либо операций, связанных ,
Я хочу вернуть 10 пользователей , которые имеют хотя бы одну связанную транзакцию за данный интервал времени.
Как я могу достичь этого с помощью MySQL?
Спасибо, это действительно работает, за исключением отсутствующего закрытия parenthese в конце второго 'IF()'. Есть ли влияние производительности на два подзаголовка? – Benjamin
Также, подумав об этом немного, мне кажется, что MySQL должен будет прочитать полный результат (все строки) исходного JOIN (возможно, во временной таблице?), Прежде чем возвращать только первые несколько, выполняя внешний SELECT. Разве это не может быть огромным узким местом производительности, когда у вас много пользователей, и только некоторые из них имеют соответствующие транзакции? – Benjamin
@Benjamin Вы можете протестировать все предлагаемые запросы с вашими фактическими данными и рассказать нам, как они сравниваются друг с другом. –