Думаю схема примерно такая будет.
В параметре where делаем новый под запрос из той же таблицы.
Делаем выборку id по совпадению названия из первой выборки с названием из второй и ограничиваем тремя результатами.
В итоге мы должны получить три id для основного запроса, который объединит эти записи с другими данными.
Запрос может выглядеть примерно так:
SELECT * FROM hotels a
WHERE a.id = (SELECT b.id FROM hotels b WHERE a.label = b.label LIMIT 3 )
А делее inner join...
Такой запрос будет проходить по всем странам и брать только три записи. Если нужно идти только по двум странам, нужно добавить дополнительное ограничение в какой либо запрос через AND.
atis //: Если из второй части, нужно получить три записи, то в ту часть где отбираются страны можно добавить под запрос с ограниченим.
SELECT *
FROM `hotels` `h`
INNER JOIN `catalog` `c`
ON `h`.`country` = `c`.`id`
WHERE `c`.`label` IN ('United States', 'Spain') AND c.id = (SELECT b.id FROM catalog b WHERE c.label = b.label LIMIT 3 )