powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / упростить вложенные селекты
9 сообщений из 9, страница 1 из 1
упростить вложенные селекты
    #39822676
ivan.555-19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет!
написал такую штуку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create table t1 (name char(20), id int);
insert into t1 values ('aaa', 1);
insert into t1 values ('aaa', 2);
insert into t1 values ('aaa', 3);
insert into t1 values ('bb', 4);
insert into t1 values ('bb', 5);
insert into t1 values ('ccc', 6);
insert into t1 values ('dddd', 7);

create table t2 (id int);
insert into t2 values (3);
insert into t2 values (6);

select * 
from t1 
where t1.name in(
    select t1.name 
    from t1
    where t1.id in (
        select t1.id
        from t1
        inner join t2 on t2.id = t1.id
    )
);


но, она работает, по ощущениям, медленнее, чем могла бы..
не скажете, можно ли было бы аналогичный результат получить более оптимальным способом?
(думаю, мне кажется, можно одним селектом получить аналогичный результат, но пока не вижу как)
...
Рейтинг: 0 / 0
упростить вложенные селекты
    #39822680
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
select * 
from t1 
where exists ( select * from t2 where t1.id = t2.id  )
...
Рейтинг: 0 / 0
упростить вложенные селекты
    #39822687
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

результат же будет неэквивалентен исходному...
...
Рейтинг: 0 / 0
упростить вложенные селекты
    #39822693
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
select t1_1.*
from t1 t1_1
join t1 t1_2 on t1_1.name = t1_2.name
join t2 on t1_2.id = t2.id
...
Рейтинг: 0 / 0
упростить вложенные селекты
    #39822695
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivan.555-19,

Выкиньте один уровень вложенности:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select * 
  from t1 
 where t1.name in (
                    select t1.name
                      from t1
                      join t2 
                        on t2.id = t1.id
                  )



Или всё тоже самое, но на EXISTS:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * 
  from t1 
 where exists (
                select null
                  from t1 t11
                  join t2 
                    on t2.id = t11.id
                   and t11.name = t1.name
              )
...
Рейтинг: 0 / 0
упростить вложенные селекты
    #39822698
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
with cte as (
select t1.*, count(t2.id) over (partition by t1.name) cnt
from t1
left join t2 on t1.id = t2.id
)
select name, id 
from cte 
where cnt > 0
...
Рейтинг: 0 / 0
упростить вложенные селекты
    #39822745
ivan.555-19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,
Щукина Анна,
Akina,

Всем спасибо большое, перебрал все варианты, на моих данных сделал пока так:

Akina
Код: sql
1.
2.
3.
4.
select t1_1.*
from t1 t1_1
join t1 t1_2 on t1_1.name = t1_2.name
join t2 on t1_2.id = t2.id
...
Рейтинг: 0 / 0
упростить вложенные селекты
    #39822754
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivan.555-19Гавриленко Сергей Алексеевич,
Щукина Анна,
Akina,

Всем спасибо большое, перебрал все варианты, на моих данных сделал пока так:

Akina
Код: sql
1.
2.
3.
4.
select t1_1.*
from t1 t1_1
join t1 t1_2 on t1_1.name = t1_2.name
join t2 on t1_2.id = t2.id



т.е. вы уверены, что с NULL-ми при таком подходе всё будет хорошо?
...
Рейтинг: 0 / 0
упростить вложенные селекты
    #39822770
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинivan.555-19Гавриленко Сергей Алексеевич,
Щукина Анна,
Akina,

Всем спасибо большое, перебрал все варианты, на моих данных сделал пока так:

пропущено...


т.е. вы уверены, что с NULL-ми при таком подходе всё будет хорошо?А name в разных строках хранится в абсолютно одинаковом виде, без ошибок и без лишних пробелов...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / упростить вложенные селекты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]