Re: Ограниченные подзапросы
DY Tonal [EMAIL PROTECTED] wrote: DY DY А зачем, он же не корелированный? DY Не верь глазам своим (с) да, вот я тут тоже, написал запрос delete ..where in ( select... подумал, тормозить же будет наверное, ведь запрос в select много записей возвратит. Ан нет. Смотрю план... Ба, да он же кореллированный. Очень обрадовался. -- С уважением Кочмин Александр
Re: Ограниченные подзапросы
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: Ограниченные подзапросы
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: Ограниченные подзапросы
И всё-таки поведение оптимизатора в этом случае некорректно. Когда во вложенном запросе есть 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: Ограниченные подзапросы
Когда во вложенном запросе есть first или skip его нельзя преобразовывать в exists! 2.0 этого не делает. Это славно! ;-) Вот только на DELETE это никак не сказывается - там другая проблема работает. А если в подзапросе для DELETE-а будет сортировка не по первичному ключу? Тоже сползание будет? Почему вообще это происходит? Неужели подзапрос преобразуется оптимизатором в нитервал на индексе типа отначала до 10?
Re: Ограниченные подзапросы
Hello, Dmitry! You wrote on Fri, 31 Mar 2006 09:20:40 +0400: DY Патамучта DELETE наступает сам себе на яйцы. В хумор, однозначно!!! :- With best regards, Alex Pugovko.
Re: Ограниченные подзапросы
Dmitry Yemanov пишет: А если в подзапросе для DELETE-а будет сортировка не по первичному ключу? Пофиг. Почему вообще это происходит? Патамучта DELETE наступает сам себе на яйцы. Содержательный ответ. ;-) Получается, что в DELETE вообще нельзя in использовать? И вот такой DELETE удалит все данные? delete from client c where c.id in (select max(c0.id) from client c0)