Оптимизировать запрос

 
0
 
Delphi, Kylix & Pascal
ava
marhatter | 11.04.2013, 22:21
Здравствуйте, есть 2 таблицы
1. Reg

num      dat
1           Иванов
2           Петров
3           Сидоров
4           Макаров
2. Lcn

n           dat             num     sv
1           Отдел1      1          1
2           Отдел2      2          1
3           Отдел3      3          2
4           Отдел3      3          6
5           Отдел1      2          6
6           Отдел1      4          3


select t1.num from Reg as t1 inner join Lcn as t2 on t1.num = t2.num
where t2.sv <> 6 and (t2.num not in (select t3.num from Lcn as t3 where t3.sv = 6)) 
group by t1.num

В итоге должно получится

num
1
4

Запрос выполняется, но долго.
Comments (6)
ava
Akella | 12.04.2013, 08:37 #
А что такое 1 и 4? Нельзя нормально задачу описать?

added later:
Может left goin?
ava
Urfin | 12.04.2013, 09:48 #
Если условие назначается ко 2-ой таблице, то почему головная таблица 1-ая? А дальше left join - соединение должно быть.
ava
Antimol | 12.04.2013, 12:18 #

select t1.num
from Reg as t1 inner join Lcn as t2 on t1.num = t2.num
where t2.sv <> 6
group by t1.num
ava
marhatter | 14.04.2013, 10:56 #
Цитата (Akella @ 12.4.2013,  08:37)
А что такое 1 и 4?

added later:

Может left goin?

Результат выбрки. Т.е. нужно выбрать такие num, при которых во второй таблице не встречается sv = 6. Например, берем из первой таблицы num = 1, смотрим во вторую таблицу sv <> 6, выбираем num = 1. Далее берем num = 2, при этом значении num в таблице 2 есть sv = 6, следовательно его не нужно.
ava
superVad | 14.04.2013, 16:40 #

select Reg.num
from Reg
where not exists (select * from Lcn where Lcn.num = Reg.num and Lcn.sv = 6)
ava
superVad | 16.04.2013, 11:32 #
Как оно вообще синхронизирует?
Я тут - ссылка - ответ дал. А тут - ссылка - не появилось.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit