Как получить результат подзапроса l oop MySql? - PullRequest
1 голос
/ 18 июня 2020

Есть 4 объекта: Tag, Question, таблица соединения между ними - Question_Has_Tag и последняя - Related_Tag, у которой кроме id есть два поля: main_tag и child_tag. Bouth - это ссылки на Tag.id

Подзапрос возвращает более одного результата, и мне нужно l oop его, но я не знаю, как

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)
   group by t.id order by i desc;

1 Ответ

0 голосов
/ 18 июня 2020

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...