Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > update не идет


Автор: Zipper 4.5.2007, 05:49
А еще одну проблему поможете решить?
Есть такой update

 
Код

update cards c
set fields = '00000007'||
            (
            select cast(s.tab_num as varchar(6))
            from "1SOTRONOS" s
            where s.fam = c.name1 and s.im = c.name2 and s.ot = c.name3 )
where c.pfirm=10 and substring(c.fields from 9 for 6) is null
 
 
Надо дополнить поле fields таблицы cards, если оно пустое, строчкой '00000007'+табельный_номер, который берется из поля tab_num (типа integer) таблицы "1SOTRONOS" при совпадении фамилии имени отчества. Но дело в том что встречаются полные тезки и соответственно выбираются несколько записей табельного номера, а он уникальный. как мне исклбчить такую ситуацию? Пусть выбирался бы только один из них. Второго можно поправить руками. 

Автор: Alex 4.5.2007, 08:20
Ответил же...
Код

update cards c
set fields = '00000007'||
            (
            select FIRST 1 cast(s.tab_num as varchar(6))
            from "1SOTRONOS" s
            where s.fam = c.name1 and s.im = c.name2 and s.ot = c.name3 )
where c.pfirm=10 and substring(c.fields from 9 for 6) is null

Автор: jsa 4.5.2007, 15:24
с технической точки зрения это ес-но сработает, но с точки зрения условия задачи даный селект вернет первый попавшийся табельный, имхо вопрос не об написании апдейта, а из области проектирования структур данных

Автор: Alex 5.5.2007, 10:47
jsa, ты прав при нормальном проектирование БД представить такие вещи просто невозможно, но что мне теперь рассказывать людям с нуля как строить большие системы, во первых нет времени и потом в пустую для 70% это все...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)