powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UPDATE
14 сообщений из 14, страница 1 из 1
UPDATE
    #39236901
Irmantas Simaitis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Я изучаю SQL, поэтому еще раз, пожалуйста, помогите ... Сейчас непонятка с UPDATE‘ом...

Код: sql
1.
2.
3.
UPDATE TABLE1 A
SET A.COL1 = (SELECT B.COL1 FROM TABLE2 B WHERE B.COL2 = 1), A.COL2 = 1
WHERE (B.COL3 = A.COL3)



Код ругается на
Код: sql
1.
WHERE (B.COL3 = A.COL3)

. Как это написать правильно?
...
Рейтинг: 0 / 0
UPDATE
    #39236903
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Irmantas Simaitis Как это написать правильно?

Код: sql
1.
2.
3.
UPDATE TABLE1 A
SET A.COL1 = (SELECT B.COL1 FROM TABLE2 B WHERE B.COL2 = 1 and B.COL3 = A.COL3),
      A.COL2 = 1
...
Рейтинг: 0 / 0
UPDATE
    #39236905
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
merge?
...
Рейтинг: 0 / 0
UPDATE
    #39237191
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Radseatle!
You wrote on 17 мая 2016 г. 11:31:34:

Radseatle> merge?+1
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UPDATE
    #39282301
Irmantas Simaitis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет! Еще нужна помощь с UPDATE. Есть две таблицы: в одной (TABLE1) много записей, о во второй (TABLE2) скажем три. Нужно в таблице (TABLE1) обновить тех трех записей из таблицы (TABLE2) в которых совподает значения полей (COL4).

Код: sql
1.
2.
3.
UPDATE TABLE1 A
SET A.COL1=(SELECT (A.COL1-B.COL1) FROM TABLE2 B WHERE B.COL3=1 AND A.COL4 = B.COL4), 
    A.COL2=0



Lock conflict on no wait transaction.
Deadlock.
Update conflicts with concurrent update.
Multiple sources or destinations specified.

SQL Code: -901


Здесь TABLE1 и TABLE3 та же самая таблица:
Код: sql
1.
2.
3.
UPDATE TABLE1 A
SET A.COL1=(SELECT (C.COL1-B.COL1) FROM TABLE2 B LEFT JOIN TABLE3 C ON C.COL4=B.COL4 WHERE B.COL3=1 AND C.COL4 = B.COL4), 
    A.COL2=0



Multiple rows in singleton select.

SQL Code: -811


Код: sql
1.
2.
3.
4.
UPDATE TABLE1 A
SET A.COL1=(SELECT (A.COL1-B.COL1) FROM TABLE2 B WHERE B.COL3=1), 
    A.COL2=0
WHERE A.COL4 = B.COL4



Can't format message 13:794 -- message file c:\Program Files\Borland\InterBase/interbase.msg not found.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
B.COL4.

Помогите с запросом... Сразу спасибо.
...
Рейтинг: 0 / 0
UPDATE
    #39282304
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM MERGE если в твоей версии он есть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UPDATE
    #39282313
Irmantas Simaitis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovRTFM MERGE если в твоей версии он есть.


Я новичок, как то хотелось пример увидеть. Спасибо

Firebird 2.5
...
Рейтинг: 0 / 0
UPDATE
    #39282326
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Irmantas Simaitis,

а что, в доке разве примера нет? есть
http://www.ibase.ru/files/firebird/langref25rus/index.html#langref25-dml-merge
...
Рейтинг: 0 / 0
UPDATE
    #39282510
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
UPDATE
    #39282518
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Irmantas SimaitisColumn unknown.
B.COL4.

у тебя снова ТЕ ЖЕ грабли

Код: plaintext
1.
2.
3.
4.
UPDATE TABLE1 A
SET A.COL1=(SELECT (A.COL1-B.COL1)  FROM TABLE2 B  WHERE B.COL3=1), 
    A.COL2=0
WHERE A.COL4 = B.COL4

У тебя B объявлено внутри скобок - то есть снаружи скобок никаких B просто не существует

Только внутри скобок ты можешь к B обращаться. Только внутри.

в общем смотри второй пост в теме - 19180685 - и не просто его копируй, думай как и почему в нём был исправлен твой запрос - и со следующими запросами делай так же сам
...
Рейтинг: 0 / 0
UPDATE
    #39283212
Irmantas Simaitis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochIrmantas SimaitisColumn unknown.
B.COL4.

у тебя снова ТЕ ЖЕ грабли

Код: plaintext
1.
2.
3.
4.
UPDATE TABLE1 A
SET A.COL1=(SELECT (A.COL1-B.COL1)  FROM TABLE2 B  WHERE B.COL3=1), 
    A.COL2=0
WHERE A.COL4 = B.COL4

У тебя B объявлено внутри скобок - то есть снаружи скобок никаких B просто не существует

Только внутри скобок ты можешь к B обращаться. Только внутри.

в общем смотри второй пост в теме - 19180685 - и не просто его копируй, думай как и почему в нём был исправлен твой запрос - и со следующими запросами делай так же сам

Спасибо всем. С Merge получилось :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
MERGE
INTO TABLE1 C
USING (SELECT (G.COL1-H.COL1) AS COL1, H.COL4 FROM TABLE2 H LEFT JOIN TABLE3 G ON H.COL4 = G.COL4 WHERE H.COL2=1) B
ON (B.COL4 = C.COL4)
  WHEN MATCHED THEN
  UPDATE SET
    C.COL1 = B.COL1, C.COL2=1




Для спортивного интереса:
Код: sql
1.
2.
3.
UPDATE TABLE1 A
SET A.COL1 = (SELECT B.COL1 FROM TABLE2 B WHERE B.COL2 = 1 AND B.COL4 = A.COL4),
      A.COL2 = 1



A.COL1 обновляется правильно, A.COL2 весь заполняется 1. Нужно чтобы заполнились те же A.COL2 строчки, как и в A.COL1 столбике. Делается тоже с SELECT'ом?
...
Рейтинг: 0 / 0
UPDATE
    #39283699
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Irmantas SimaitisДля спортивного интереса:
Код: sql
1.
2.
3.
UPDATE TABLE1 A
SET A.COL1 = (SELECT B.COL1 FROM TABLE2 B WHERE B.COL2 = 1 AND B.COL4 = A.COL4),
      A.COL2 = 1



A.COL1 обновляется правильно, A.COL2 весь заполняется 1. Нужно чтобы заполнились те же A.COL2 строчки, как и в A.COL1 столбике. Делается тоже с SELECT'ом?

Так ведь у тебя на изменение COL1 ограничение -
Код: sql
1.
WHERE B.COL2 = 1



То есть тогда просто

Код: sql
1.
2.
3.
UPDATE TABLE1 A
SET A.COL1 = (SELECT B.COL1 FROM TABLE2 B WHERE B.COL4 = A.COL4),
WHERE A.COL2 = 1
...
Рейтинг: 0 / 0
UPDATE
    #39283700
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
глупость написал. Не проснулся еще в понедельник
...
Рейтинг: 0 / 0
UPDATE
    #39283705
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем тогда либо MERGE либо цикл

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
EXECUTE BLOCK

DECLARE VARIABLE ....

FOR SELECT B.COL1, A.ID FROM TABLE1 A, TABLE2 B 
      WHERE B.COL2 = 1 AND B.COL4 = A.COL4
      INTO :Var1, :Var2
  DO UPDATE TABLE1 SET COL1 = :Var1, COL2 = 1 WHERE ID = :Var2
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UPDATE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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