Форум: "Начинающим";
Текущий архив: 2013.04.07;
Скачать: [xml.tar.bz2];
ВнизНе выполняется SQL запрос Найти похожие ветки
← →
ixen (2012-10-02 09:47) [0]Всем привет! Подскажите почему не выполняется следующий запрос на 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 входит в результат вложенного селекта.
Я не силен в запросах, подскажите как правильно
← →
ixen (2012-10-02 09:49) [1]забыл написать, в IBExpert пишет такую ошибку
Plan
PLAN SORT ((MOVES NATURAL))
PLAN (TOV_USL NATURAL)
← →
Ega23 © (2012-10-02 10:08) [2]
> и убрать строки с одинаковыми значениями why_id?
distinct + F1
> подскажите как правильно
Вместо group by поставь distinct. А так, вроде, всё правильно.
← →
AV © (2012-10-02 10:52) [3]
> select why_id from moves where type_doc="M" group by why_id
нет аггрегации ?
group by юзается, если надо кол-во, сумма, среднее, etc.
а ты чего ищешь? ничего
да там и дистинкт не нужен даже
← →
Ega23 © (2012-10-02 10:58) [4]
> да там и дистинкт не нужен даже
Лучше впердолить. Хотя я что-то отстал от прогресса, мож сейчас оптимизаторы умные пошли...
← →
ixen (2012-10-02 11:01) [5]заменил вложенный селект с применением distinct
select distinct why_id from moves where type_doc="M"
дал то что мне нужно...вложил в updateupdate 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 11:06) [6]Синтаксически я никаких ошибок не вижу.
И, кстати, текст ошибки давай.
← →
ixen (2012-10-02 11:13) [7]блин.. ступил.. все работает.. спасибо ребята..
← →
Ega23 © (2012-10-02 11:16) [8]Commit забыл? :)))
← →
AV © (2012-10-02 12:02) [9]
> 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) [10]
> from
> moves M
> where
> M.type_doc="M"
> and M.why_id = TU.id)
← →
ixen (2012-10-02 13:01) [11]
> Ega23 © (02.10.12 11:16) [8]
> Commit забыл? :)))
ага :))
← →
Ega23 © (2012-10-02 13:17) [12]
> ага :))
Бывает, чо... :)
← →
AV © (2012-10-02 13:45) [13]
> Бывает, чо... :)
ага :)
Один раз, в PL/SQL, тоже не закоммитил, вышел аварийно, потом сколько-то дней прошло, пока понял, что промежуточная таблица итогов порушена логически.
и до сих пор, бывает, не нажимаю "получить все записи", потом строю сводную и думаю, что же это не сходится то со вчерашним днем.. :)
← →
Кщд (2012-10-03 09:46) [14]>ixen (02.10.12 11:01) [5]
план запроса - фиговый
прежде, чем писать group by/distinct, хорошо бы отдавать себе отчет, а - собственно - для чего?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.04.07;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c