我有一個類似於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您可以使用您的實際數據測試所有建議的查詢,並告訴我們他們如何比較對方。 –