Re: Ограниченные подзапросы

2006-03-31 Пенетрантность Alexandr Kochmin


 DY Tonal [EMAIL PROTECTED] wrote:
 DY 
 DY А зачем, он же не корелированный?

 DY Не верь глазам своим (с)

да, вот я тут тоже, написал запрос delete ..where in ( select...
подумал, тормозить же будет наверное, ведь запрос в select много записей 
возвратит.
Ан нет. Смотрю план... Ба, да он же кореллированный.
Очень обрадовался.


--
С уважением
Кочмин Александр




Re: Ограниченные подзапросы

2006-03-30 Пенетрантность Tonal


Tonal пишет:


Занабобилость удалять из таблицы 100 первых записей.
Вроде бы просто:
delete from CLIENTS C
where C.IDCLIENT in (
  select first 100 C.IDCLIENT
  from CLIENTS C
  order by C.IDCLIENT
)

Для проверки нарисовал запросик:
select C.IDCLIENT
from CLIENTS C
where C.IDCLIENT in (
  select first 100 C.IDCLIENT
  from CLIENTS C
  order by C.IDCLIENT
)

И он вернул мне ВСЕ записи!
Кто-нибудь может объяснить почему?

Прочитал релизноты, чуть подумал, написал такой запрос:
select C0.IDCLIENT
from CLIENTS C0
where C0.IDCLIENT  (
  select first 1 skip 10 C.IDCLIENT
  from CLIENTS C
  order by C.IDCLIENT
)
Действительно выдаёт 10 первых.
Если написать
delete from CLIENTS C0
where C0.IDCLIENT  (
  select first 1 skip 10 C.IDCLIENT
  from CLIENTS C
  order by C.IDCLIENT
)
то именно 10 и удаляются. ;-)

Есть ли какие то подводные камни в этом решении?



Re: Ограниченные подзапросы

2006-03-30 Пенетрантность Shiliaev Ruslan


Tonal пишет:

Действительно выдаёт 10 первых.
Если написать
delete from CLIENTS C0
where C0.IDCLIENT  (
  select first 1 skip 10 C.IDCLIENT
  from CLIENTS C
  order by C.IDCLIENT
)
то именно 10 и удаляются. ;-)

Есть ли какие то подводные камни в этом решении?




Привет!
Если поле IDCLIENT уникальное - то камней нету.

--
Удачи!

Shiliaev Ruslan



Re: Ограниченные подзапросы

2006-03-30 Пенетрантность Tonal


И всё-таки поведение оптимизатора в этом случае некорректно.
Когда во вложенном запросе есть first или skip его нельзя 
преобразовывать в exists!

Для проверки нарисовал запросик:
select C.IDCLIENT
from CLIENTS C
where C.IDCLIENT in (
  select first 100 C.IDCLIENT
  from CLIENTS C
  order by C.IDCLIENT
)
И он вернул мне ВСЕ записи!
Кто-нибудь может объяснить почему?

Прочитал релизноты, чуть подумал, написал такой запрос:
select C0.IDCLIENT
from CLIENTS C0
where C0.IDCLIENT  (
  select first 1 skip 10 C.IDCLIENT
  from CLIENTS C
  order by C.IDCLIENT
)
Действительно выдаёт 10 первых.




Re: Ограниченные подзапросы

2006-03-30 Пенетрантность Tonal


Когда во вложенном запросе есть first или skip его нельзя преобразовывать 
в exists!


2.0 этого не делает. 

Это славно! ;-)

Вот только на DELETE это никак не сказывается - там 
другая проблема работает.
А если в подзапросе для DELETE-а будет сортировка не по первичному 
ключу? Тоже сползание будет? Почему вообще это происходит?
Неужели подзапрос преобразуется оптимизатором в нитервал на индексе типа 
отначала до 10?




Re: Ограниченные подзапросы

2006-03-30 Пенетрантность Alex Pugovko


Hello, Dmitry!
You wrote  on Fri, 31 Mar 2006 09:20:40 +0400:


DY Патамучта DELETE наступает сам себе на яйцы.

В хумор, однозначно!!!  :-

With best regards, Alex Pugovko.




Re: Ограниченные подзапросы

2006-03-30 Пенетрантность Tonal


Dmitry Yemanov пишет:

А если в подзапросе для DELETE-а будет сортировка не по первичному ключу?

Пофиг.



Почему вообще это происходит?

Патамучта DELETE наступает сам себе на яйцы.

Содержательный ответ. ;-)

Получается, что в DELETE вообще нельзя in использовать?
И вот такой DELETE удалит все данные?
delete from client c
where c.id in (select max(c0.id) from client c0)