Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / упростить вложенные селекты / 9 сообщений из 9, страница 1 из 1
05.06.2019, 10:40
    #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
05.06.2019, 10:49
    #39822680
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
упростить вложенные селекты
Код: sql
1.
2.
3.
select * 
from t1 
where exists ( select * from t2 where t1.id = t2.id  )
...
Рейтинг: 0 / 0
05.06.2019, 10:55
    #39822687
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
упростить вложенные селекты
Гавриленко Сергей Алексеевич,

результат же будет неэквивалентен исходному...
...
Рейтинг: 0 / 0
05.06.2019, 11:00
    #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
05.06.2019, 11:01
    #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
05.06.2019, 11:03
    #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
05.06.2019, 12:05
    #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
05.06.2019, 12:14
    #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
05.06.2019, 12:39
    #39822770
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
упростить вложенные селекты
Ролг Хупинivan.555-19Гавриленко Сергей Алексеевич,
Щукина Анна,
Akina,

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

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


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


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