![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не выполняется 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)