Использование limit-clause и parent-query-column в подзапросах SQL

Я хочу использовать предложение limit внутри подзапроса. В то же время столбец родительского запроса должен быть доступен внутри подзапроса. Я использую MySQL и хочу сделать что-то вроде ниже:

select * from users u1 join (SELECT b1.userid from bids b1 where b1.userid=u1.userid limit 0,4) a1

Конечно, это недопустимо, поскольку b1.authorid недоступен таким образом.

1) Я хочу ограничить результат после применения условия, в котором исключено следующее:

select * from users u1 JOIN (SELECT b1.userid from bids b1 limit 0,4) a1 ON b1.userid=u1.userid

2) Следующее не поддерживается в MySQL ( LIMIT с IN/ANY/EVERY/SOME):

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;

2 ответа

Учитывая вашу 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 Fiddle.

Да, он поддерживает ограничение в соединении запроса. Просто измените 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
Другие вопросы по тегам