SELECT `u`.*
FROM `users` AS `u`
JOIN `user_tags` AS `ut` ON `ut`.`user_id` = `u`.`id`
AND `ut`.`tag_id` IN (1, 2, ..., N)
GROUP BY `u`.`id`
HAVING COUNT(*) = NSELECT `u`.*
FROM `users` AS `u`
JOIN `user_tags` AS `ut` ON `ut`.`user_id` = `u`.`id`
AND `ut`.`tag_id` IN (1, 2, ..., N)
GROUP BY `u`.`id`
HAVING COUNT(DISTINCT `ut`.`tag_id`) = N CREATE FUNCTION SearchRoot(id INT)
BEGIN
DECLARE parent INT;
SET parent = id;
REPEAT
SET id = parent;
SET parent = (SEARCH `id_parent` FROM `table` WHERE `id` = id);
UNTIL parent > 0 END REPEAT;
RETURN id;
END SELECT `t2`.*
FROM (
SELECT `t1`.`strana`, `t1`.`min_price`, MAX(`t2`.`date`) AS `max_date`
FROM (
SELECT `strana`, MIN(`price`) AS `min_price`
FROM `table`
GROUP BY `strana`
) AS `t1`
JOIN `table` AS `t2` ON `t2`.`strana` = `t1`.`strana`
AND `t2`.`price` = `t1`.`min_price`
GROUP BY `strana`
) AS `t1`
JOIN `table` AS `t2` ON `t2`.`strana` = `t1`.`strana`
AND `t2`.`date` = `t1`.`max_date` AND `t2`.`price` = `t1`.`min_price`