@maksimovamaris

Как переделать коррелированный вложенный подзапрос в некоррелированный?

Есть таблица со спортсменами,в ней поля id спортсмена уникальное not null и вид спорта, нужно вывести тех, кто занимается больше чем одним видом спорта. как это сделать без коррелированного подзапроса?(другими словами вывести повторяющиеся строки таблицы столько раз, сколько они повторяются)
Можно ли как-то более эффективно выполнить данный запрос?
Мой код
select  pair_sports.fio ,pair_sports.sport
 from
 fitness.pair_sports
 where fio=any (SELECT pair_sports.fio
 FROM   fitness.pair_sports
 group by (fio)
 having count(*)>1)
 order by fio
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 1
baitarakhov
@baitarakhov
Full Stack Developer
Для того, что бы можно сделать анализ, создай схему с нужным СУБД на сайте sqlfiddle.com и вышли линк на свою схему, далее посмотрим. По предварительному анализу, вижу что в вопрос в категорий MYSQL, так как я не работал с данным СУБД, то постараюсь написать выборку на простом SQL и что то на подобие MYSQL.

1) Простой и читабельный вариант:
select  t.*
 from fitness.pair_sports t
 where exists 
 (
 select t2.fio 
 from fitness.pair_sports t2
   where t2.fio = t.fio
 group by t2.fio
   having count(*) > 1
 );


2) Какой то мутный вариант, возможно сработает
select * from
(
select  @rownum:= case when t.fio <> @name then 0 else 1 end as rn,
        @name:=t.fio as name,
        t.*
 fitness.pair_sports t
order by t.fio
) tt
where tt.rn = 1;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы