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