L oop по результату подзапроса в SQL невозможно .. вы можете использовать l oop на процедурном языке, например: язык на стороне сервера при использовании триггера ..
в любом случае в вашем если вы могли бы использовать соединение вместо сравнения с результатом subqiery
select t.id, t.name, count(question_has_tag.tag_id) as i
from tag as t
join question_has_tag on t.id = question_has_tag.tag_id
INNER JOIN (
select related_tag.child_tag from related_tag
join tag as t on related_tag.main_tag = t.id
where related_tag.main_tag = 1
) t2 t.id = t2.child_tag
group by t.id order by i desc;
или если вам нужен только результат, ограничьте результат
select t.id, t.name, count(question_has_tag.tag_id) as i
from tag as t
join question_has_tag on t.id = question_has_tag.tag_id
where t.id = (
select related_tag.child_tag from related_tag
join tag as t on related_tag.main_tag = t.id
where related_tag.main_tag = 1
ORDER BY child_tag
limit 1
)
group by t.id order by i desc;
или также используйте предложение IN вместо =
select t.id, t.name, count(question_has_tag.tag_id) as i
from tag as t
join question_has_tag on t.id = question_has_tag.tag_id
where t.id IN (
select related_tag.child_tag from related_tag
join tag as t on related_tag.main_tag = t.id
where related_tag.main_tag = 1
)
group by t.id order by i desc;