Я пытаюсь отобразить список магазинов, в каждом из которых есть 3 случайных элемента из их магазина, если у них есть 3 или более списков, которые активно рекламируются. У меня есть 3 таблицы: одна для магазинов - «Магазины», одна для объявлений - «Объявления» и одна для отслеживания активных рекламодателей - «AdShops».
Используя приведенное ниже утверждение, списки возвращаются случайным образом, однако я не получаю ровно 3 списка (строк), возвращаемых на магазин.
SELECT AdShops.ID, Shops.url, Shops.image_url, Shops.user_name AS shop_name,
Shops.title, L.listing_id AS listing_id, L.title AS listing_title,
L.price as price, L.image_url AS listing_image_url, L.url AS listing_url
FROM AdShops INNER JOIN
Shops ON AdShops.user_id = Shops.user_id INNER JOIN
Listings AS L ON Shops.user_id = L.user_id
WHERE (Shops.is_vacation = 0 AND Shops.listing_count > 2 AND
L.listing_id IN
(SELECT TOP 3 L2.listing_id
FROM Listings AS L2
WHERE L2.listing_id IN
(SELECT TOP 100 PERCENT L3.listing_id
FROM Listings AS L3
WHERE (L3.user_id = L.user_id)
)
ORDER BY NEWID()
)
)
ORDER BY Shops.shop_name
Я в тупике. У кого-нибудь есть идеи как это исправить?
Идеальным решением была бы одна запись на магазин с 3 списками (и соответствующими данными) в столбцах, а не в строках - возможно ли это?