Показать сообщение отдельно
  #7  
Старый 14.01.2011, 12:27
Iros Iros вне форума
Прохожий
 
Регистрация: 13.01.2011
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Проблема в том, что для Update, твой подзапрос должен вернуть всего одну строчку, а у тебя, похоже, коды повторяются (a1 и b1).

Теперь о задаче.
Вариант 1. Если это разрвая операция, то лучше просто удалить данные о 6 станции из первой таблицы и скопировать туда данные из второй.
Код:
begin

delete from table1 where a1 = 6;
insert into table1 (a1, b1, c1) values (select a1, b1, c1 from table2 where a1 = 6);

commit;

Вариант 2. Если это постоянная проблема, то:
а) решаем ее как и в в.1, но только делаем процку, которую периодически и запускаем.
б) делаем view так, что в нее попадают данные для всх станций кроме 6 из первой таблицы и данные из второй таблицы, но только о 6ой станции:

Вообще, комбинации a1 и b1 не повторяются. Но даже если повторяются, что плохого? Значит, во все строки первой таблицы, где встречается сочетание a1-b1 вставлять одно и тоже значение с1. (Во второй таблице точно повторяющихся сочетаний нет).

Вариант с удалением не подходит, т.к. в первой таблице помимо этих трёх полей содержится ещё огромное количество других... Просто так оказалось, что кусок одного из этих полей не заполнен, и его можно заполнить, взяв данные из другой таблицы.
Делать новую таблицу и в неё перемещать данные из обеих таблиц проблематично, т.к. получается, что нужно для части записей перенести данные полностью из первой таблицы, а для части (например, с 201ой по 301ую) - все, кроме этого поля, из первой, а это поле из второй.
Кроме того, проблемно будет восстанавливать ключи и связи к этой таблице. Да и из старой удалить записи невозможно, т.к. на них ссылаются другие таблицы.

Неужели никак нельзя просто вставить записи в этот столбец по определённому условию?...

Ну может циклом..
Ответить с цитированием