我有一个类似于LIMITing a SQL JOIN的问题,但有一个稍微复杂的要求。限制SQL 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?
谢谢,这确实有效,除了在第二个IF()的末尾丢失关闭括号。这两个子选择会对性能产生影响吗? – Benjamin
另外,想一想更多一点,它在我看来,MySQL将不得不读取原始JOIN的完整结果(所有行)(可能在临时表中?),然后才执行第一个外部SELECT。如果你有很多用户,那么这难道不是一个巨大的性能瓶颈吗?只有少数用户拥有匹配的交易? – Benjamin
@Benjamin您可以使用您的实际数据测试所有建议的查询,并告诉我们他们如何比较对方。 –