サブクエリ内で制限句を使用したい.同時に、サブクエリ内で親クエリ列にアクセスできる必要があります.MySQLを使用しており、以下のようなことをしたい:
select * from users u1 join (SELECT b1.userid from bids b1 where b1.userid=u1.userid limit 0,4) a1
もちろん、この方法では b1.authorid にアクセスできないため、これは有効ではありません。
1)where句を適用した後の結果を制限したいので、明らかに以下は除外されます:
select * from users u1 JOIN (SELECT b1.userid from bids b1 limit 0,4) a1 ON b1.userid=u1.userid
2) 以下は MySQL ではサポートされていません ( IN/ANY/EVERY/SOME を指定した LIMIT ):
select * from users u1 join bids b2 ON b2.userid IN (SELECT b1.userid from bids b1 where b1.userid=u1.userid limit 0,4)
MySQL で目的の結果を達成する方法はありますか?
SQLFiddle リンク: SQL クエリ
クエリの意味を別の方法で説明しましょう。ANS が出力、USER がユーザー テーブル、BID が入札テーブルであるとします。クエリの表現は次のようになります。
USER=table(users);
While(USER has next raw) {
uraw=USER.nextraw;
BID=table(bids);
count=0;
While(BID has next raw) {
braw=BID.nextraw;
if(uraw.author < braw.id) {
if(count>=0) {
ANS.add(fields from uraw,fields from braw);
}
count=count+1;
}
if(count>=4) {
break;
}
}
}
return ANS;