私はLIMITing a SQL JOINに似た問題がありますが、やや複雑な要件があります。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人のユーザが、返されます。
の特定の時間範囲に少なくとも1つの関連する取引を持つ10人のユーザーを返信します。
どのように私はこれをMySQLを使用して達成できますか?
ありがとうございました、これは実際には、2番目の 'IF()'の終わりに欠落している閉じ括弧を除いて動作します。 2つの副選択のパフォーマンスに影響はありますか? – Benjamin
また、もう少し考えてみると、MySQLは元のJOINの完全な結果(すべての行)を読み込む必要があります(おそらく一時テーブルですか?)。外側SELECT。これは、多くのユーザーがいる場合にはパフォーマンス上の大きなボトルネックにはなりません。 – Benjamin
@Benjamin提案されたすべてのクエリを実際のデータでテストし、どのように比較するかを教えてください。 –