Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не выполняется SQL запрос [D7]


ixen ©   (2012-10-02 09:47:00) 

Всем привет! Подскажите почему не выполняется следующий запрос на Firebird 2.5
update tov_usl set use_as_mat=1 where id in (select why_id from moves where type_doc='M' group by why_id)

Суть запроса в следующем. Надо из таблицы moves выбрать записи по указанному условию и убрать строки с одинаковыми значениями why_id? т.е. оставить только по одному значению. Сам по себе вложенный Select выполняется без ошибки. Затем нужно обновить записи в другой таблице, где значение поля id входит в результат вложенного селекта.

Я не силен в запросах, подскажите как правильно


Кщд   (2012-10-03 09:46:00) [1]

>ixen   (02.10.12 11:01) [5]
план запроса - фиговый
прежде, чем писать group by/distinct, хорошо бы отдавать себе отчет, а - собственно - для чего?


AV   (2012-10-02 13:45:00) [2]


> Бывает, чо...  :)

ага :)

Один раз, в PL/SQL, тоже не закоммитил, вышел аварийно, потом сколько-то дней прошло, пока понял, что  промежуточная таблица итогов порушена логически.

и до сих пор, бывает, не нажимаю  "получить все записи", потом строю сводную  и думаю, что же это не сходится то со вчерашним днем.. :)


Ega23   (2012-10-02 13:17:00) [3]


> ага :))


Бывает, чо...  :)


ixen   (2012-10-02 13:01:00) [4]


> Ega23 ©   (02.10.12 11:16) [8]
> Commit забыл? :)))

ага :))


AV   (2012-10-02 12:02:00) [5]


> Ega23 ©   (02.10.12 10:58) [4]
> > да там и дистинкт не нужен даже
> Лучше впердолить. Хотя я что-то отстал от прогресса, мож
> сейчас оптимизаторы умные пошли...

да... там зависит от плана.. какие индексы, как будет искать

но следует всегда проверять возможность  exists | not exists
аля
update
 tov_usl TU
set
 TU.use_as_mat=1
where
 exists (select
              M.why_id
          from
             moves M
          where
            type_doc='M'
            and why_id = id)


AV   (2012-10-02 12:02:00) [6]


>           from
>              moves M
>           where
>             M.type_doc='M'
>             and M.why_id = TU.id)


Ega23   (2012-10-02 11:16:00) [7]

Commit забыл? :)))


ixen   (2012-10-02 11:13:00) [8]

блин.. ступил.. все работает.. спасибо ребята..


Ega23   (2012-10-02 11:06:00) [9]

Синтаксически я никаких ошибок не вижу.
И, кстати, текст ошибки давай.


ixen   (2012-10-02 11:01:00) [10]

заменил вложенный селект с применением distinct
select distinct why_id from moves where type_doc='M'
дал то что мне нужно...вложил в update
update tov_usl set use_as_mat=1 where id in (select distinct why_id from moves where type_doc='M')
и та же самая ошибка что и в первом случае
Plan
PLAN SORT ((MOVES NATURAL))
PLAN (TOV_USL NATURAL)


Ega23   (2012-10-02 10:58:00) [11]


> да там и дистинкт не нужен даже


Лучше впердолить. Хотя я что-то отстал от прогресса, мож сейчас оптимизаторы умные пошли...


AV   (2012-10-02 10:52:00) [12]


> select why_id from moves where type_doc='M' group by why_id

нет аггрегации ?
group by юзается, если надо кол-во, сумма, среднее, etc.
а ты чего ищешь? ничего

да там и дистинкт не нужен даже


Ega23   (2012-10-02 10:08:00) [13]


>  и убрать строки с одинаковыми значениями why_id?


distinct + F1


> подскажите как правильно


Вместо group by поставь distinct. А так, вроде, всё правильно.


ixen   (2012-10-02 09:49:00) [14]

забыл написать, в IBExpert пишет такую ошибку
Plan
PLAN SORT ((MOVES NATURAL))
PLAN (TOV_USL NATURAL)


Наверх

Титульная страница Поиск, карта сайта Написать письмо