1

サブクエリ内で制限句を使用したい.同時に、サブクエリ内で親クエリ列にアクセスできる必要があります.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;
4

2 に答える 2

0

はい、結合クエリの制限をサポートしています。ON ON b1.authorid = a1.id を b1.authorid = a1.id に変更するだけです

SELECT * FROM books b1 JOIN (SELECT * FROM authors LIMIT 0,4) a1 where b1.authorid = a1.id
于 2013-07-16T14:29:24.400 に答える
0

SQL フィドルを考えると、次のようなものが機能するはずです。

 SELECT u.*
      , i.*
      , x.bid
      , x.bid_date
   FROM bids x 
   JOIN bids y 
     ON y.userid = x.userid 
    AND y.bid_date <= x.bid_date 
   JOIN users u
     ON u.userid = x.userid
   JOIN items i
     ON i.itemno = x.itemno
  GROUP 
     BY userid,bid_date
 HAVING COUNT(*) <= 4;

SQLフィドル

于 2013-07-16T21:11:54.073 に答える