Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.04.07;
Скачать: CL | DM;

Вниз

Не выполняется 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"
дал то что мне нужно...вложил в 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 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.007 c
2-1348239922
stronger
2012-09-21 19:05
2013.04.07
консольный модуль в delphi


15-1354993400
ProgRAMmer Dimonych
2012-12-08 23:03
2013.04.07
Видео о боевых действиях: где найти?


2-1349027310
ankazh
2012-09-30 21:48
2013.04.07
RichEdit


2-1349179741
dmi3
2012-10-02 16:09
2013.04.07
Странная ошибка (Delphi XE3)


15-1355390830
ПЛОВ
2012-12-13 13:27
2013.04.07
Впорос по компоненту TcxSpreadSheetBook