powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / запрос UPDATE в dbf
17 сообщений из 17, страница 1 из 1
запрос UPDATE в dbf
    #34919852
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

помогите пожалуйста с запросом

есть таблица следующего вида

Код: plaintext
1.
2.
3.
 
CREF                    CDETALLE                      CCODFAM     NPREMAYOR
 66009     Champan "Yubileynoe" ( 0 . 750  l/ 12 )            ALCOL           4 , 970000 

код название група цена

задача запроса :
найти данные в CDETALLE до первого пробела и перенести эти данные в CCODFAM т.е. в конце должно выйти

Код: plaintext
1.
2.
3.
 
CREF               CDETALLE                            СCODFAM          NPREMAYOR
 66009     Champan "Yubileynoe" ( 0 . 750  l/ 12 )          ALCOL/Champan        4 , 970000 

я написал запрос


код SQL

Код: plaintext
 UPDATE articulo SET CCODFAM = (select SUBSTRING (CDETALLE,  1 , POSITION (' ' IN CDETALLE)) FROM articulo WHERE CCODFAM = 'ALCOL')

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

ошибка которую мне выдает "single-row subquery returns more than one row", я удалил все поля кроме одного и сработало! как теперь сделать для более чем одного поля?
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34921111
LjaLja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело не в количестве полей. А втом, что Ваш подзапрос, с помощью которого Вы обновляете значение (справа от знака равенства) выдает больше, чем одно значение для обновления. Из-за этого ошибка. Необходимо уточнить подзапрос, накладывая дополнительное условие, например, уникальный идентификатор той записи, которую Вы обновляете.
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34921364
LjaLja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если в таблице articulo есть поле с уникальными значениями, для примера с именем ID, можно попытаться такой запрос:

UPDATE articulo tab1 SET CCODFAM = (select SUBSTRING (CDETALLE, 1, POSITION (' ' IN CDETALLE)) FROM articulo WHERE CCODFAM = 'ALCOL'
AND tab1.ID= articulo.ID)
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34921586
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может я что - то не понимаю, но мне нужно обновить таблицу, а не отдельно взятое поле, т.е.

Код: plaintext
1.
2.
3.
4.
CREF                    CDETALLE                      CCODFAM        NPREMAYOR
 66009     Champan "Yubileynoe" ( 0 . 750  l/ 12 )            ALCOL           4 , 970000 
 66010     Vodka "Kristal" ( 0 . 500  l/ 12 )                 ALCOL           7 , 970000 
 66011     Beer "Tuborg" ( 1  l/ 12 )                       ALCOL           1 , 970000 

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

Код: plaintext
1.
2.
3.
4.
CREF                    CDETALLE                      CCODFAM                NPREMAYOR
 66009     Champan "Yubileynoe" ( 0 . 750  l/ 12 )            ALCOL/Champan           4 , 970000 
 66010     Vodka "Kristal" ( 0 . 500  l/ 12 )                 ALCOL/Vodka             7 , 970000 
 66011     Beer "Tuborg" ( 1  l/ 12 )                       ALCOL/Beer              1 , 970000 

а так, насколько я понял обновление пройдет для 1 конкретного поля?
счас пойду пробовать....
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34921617
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и еще поле CREF (код товара) является уникальным

вот это место
UPDATE articulo tab1 SET CCODFAM
я не очень понял (
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34921640
LjaLja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С помощью приведенного запроса обновляется не отдельная запись, а вся таблица. А добавленное условие позволяет для обновления поля CCODFAM каждой записи использовать часть значения поля CDETALLE, взятое из той же записи, которая обновляется.

Единственное замечание, что я работаю с Oracle.

Напишите, что у Вас получится.
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34921672
LjaLja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В запрос добавлено условие, чтобы для обновления одного поля записи использовалась подстрока другого поля, но той же записи. Запрос работает с одной таблицей – ее обновляет и ее же использует для получения обновляющих значений. Фактически дополнительное ограничение в подзапросе имеет смысл articulo.CREF(обновляемой таблицы)= articulo.CREF(таблицы, из которой берутся значения для обновления). Поскольку СУБД должна различать эти таблицы в условии запроса, для одной из таблиц вводится псевдоним tab1 (наименование любое, в рамках допустимого). Такое переименование носит временный характер и не влечет за собой изменения наименования таблицы в БД.
В Oracle такие запросы проходят.
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34921715
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас попробую и напишу...
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34921809
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет ...не идет никак...пишет синтактическая ошибка - на tab1
видимо это только в Оракле проходит....
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34921855
LjaLja
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Жаль, что не получилось. Может что еще подскажут спецы по DB2.
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34922371
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ок (
попробуем поменять условие

если такое же условие но в MySQL??

может быть так кто-то подскажет...

или мне теперь новую тему открывать?
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34922453
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Вы, вообще, с db2 работаете?
Если да, то укажите версию.

Спрашиваю, потому что:
1. Функции substring в том виде, каком вы написали, нет в db2.
2. "single-row subquery returns more than one row" - оракловое сообщение об ошибке.

И задачу уточните: вам надо по всей таблице update сделать или только по тем записям, где ccodfam='ALCOL'?
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34922782
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы, вообще, с db2 работаете?
Если да, то укажите версию.

Спрашиваю, потому что:
1. Функции substring в том виде, каком вы написали, нет в db2.
2. "single-row subquery returns more than one row" - оракловое сообщение об ошибке.

И задачу уточните: вам надо по всей таблице update сделать или только по тем записям, где ccodfam='ALCOL'?

сложный вопрос )))

на самом деле ситуация такова:

- я пишу Java - программу для обработки dbf файла. данное сообщение - сообщение Java-компилятора
dbf файл формируется программой складского учета. это DBF IV (на всяк я приложил файл)

да update нужно сделать с учетом условия.

з.ы. я уже и в MySql перегнал для простоты жизни и все то же самое - по отдельности запросы работают, а вместе нет...
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34923284
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c.Smoletможет я что - то не понимаю, но мне нужно обновить таблицу, а не отдельно взятое поле, т.е.

Код: plaintext
1.
2.
3.
4.
CREF                    CDETALLE                      CCODFAM        NPREMAYOR
 66009     Champan "Yubileynoe" ( 0 . 750  l/ 12 )            ALCOL           4 , 970000 
 66010     Vodka "Kristal" ( 0 . 500  l/ 12 )                 ALCOL           7 , 970000 
 66011     Beer "Tuborg" ( 1  l/ 12 )                       ALCOL           1 , 970000 

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

Код: plaintext
1.
2.
3.
4.
CREF                    CDETALLE                      CCODFAM                NPREMAYOR
 66009     Champan "Yubileynoe" ( 0 . 750  l/ 12 )            ALCOL/Champan           4 , 970000 
 66010     Vodka "Kristal" ( 0 . 500  l/ 12 )                 ALCOL/Vodka             7 , 970000 
 66011     Beer "Tuborg" ( 1  l/ 12 )                       ALCOL/Beer              1 , 970000 

а так, насколько я понял обновление пройдет для 1 конкретного поля?
счас пойду пробовать....

update table set ccodfam = ccodfam || '/' || substr(cdetalle, 1, charat(' ', cdetalle)) where ccodfam = 'ALCOL'
зы. сам не пробовал, но по идее должно быть вот так.
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34923405
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почти все получилось!!!
Код: plaintext
1.
2.
update datos set ccodfam = SUBSTRING_INDEX(datos.CDETALLE, ' ',  1  )
where ccodfam = 'ALCOL'

оказывается надо было таблицу в SUBSTRING_INDEX прописать....

единственное, что так и не получается это добавить надпись

варианты типа

Код: plaintext
1.
' ALCOL/' + SUBSTRING_INDEX(datos.CDETALLE, ' ',  1  )

или

Код: plaintext
1.
ccodfam || '/' || SUBSTRING_INDEX(datos.CDETALLE, ' ',  1  )

не идут, прописывается 0 и в первом и втором случае...
что подскажете?
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34923410
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SUBSTRING_INDEX( datos. CDETALLE, ' ', 1 )

datos. - это я жирным сделать хотел :-)
...
Рейтинг: 0 / 0
запрос UPDATE в dbf
    #34924604
c.Smolet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
супер!
работает все и в dbf и в MySql

соответственно получилось

MySql


Код: plaintext
1.
2.
UPDATE articulo 
SET CCODFAM = CONCAT(CCODFAM, '/', SUBSTRING_INDEX(articulo.CDETALLE,' ', 1 ))
WHERE CCODFAM = 'ALCOL' 


dbf


Код: plaintext
1.
2.
UPDATE articulo 
SET ccodfam = 'ALCOL/' + SUBSTRING (cdetalle,  1 , POSITION (' ' IN articulo.cdetalle)) 
WHERE ccodfam = 'ALCOL'


главное в SUBSTRING прописывать имя таблицы и все будет ок.

всем спасибо за советы.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / запрос UPDATE в dbf
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]