![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
insert into [D7, MSSQL]
сергей1 © (2004-08-12 11:30:00)есть такой вопрос :
этот запрос переписывает все данные из таблицы Table1 в Table2 :
insert into Table2 select * from Table1
каким образом подменить часть столбцов другой информацией, т.е. например
в последний столбец подставить другие данные
запрос типа этого неработает
insert into Table2 values
(
(select field1 from Table1),
'another_data'
)
сергей1 (2004-08-12 15:36:00) [1]твой вариант как у Соловьева и у меня в топике, он к сожалению не работает, Nikolay дал правильный вариант
Ega23 (2004-08-12 14:55:00) [2]
insert into Table2(f1, f2)
values ((Select f1 from Table2), (select f2 from Table1 where f1=a1)
сергей1 (2004-08-12 14:39:00) [3]может я неверно описал ситуацию, но нормализация здесь тоже непричем, есть таблица :
f1 | f2
--------
a1 | 5
b1 | 6
c1 | 3
d1 | 8
сюда надо добавить несколько новых строк, где f1 берется из другой таблицы по определенным критериям,
а поле f2 дублируется от строки а1
f1 | f2
--------
a1 | 5
b1 | 6
c1 | 3
d1 | 8
x1 | 5
y1 | 5
z1 | 5
Ega23 (2004-08-12 13:16:00) [4]причем первый столбец берется из одной таблицы
Именно это и называется нормализацией БД, когда вместо дублирования стринговых полей используется вторичный ключ. Зачем дублировать информацию, если у тебя уже в одной таблице есть это поле?
сергей1 (2004-08-12 13:11:00) [5]>Nikolay M. ©
sorry, я твой вариант не заметил, моя реплика была к Соловьеву, а твой вариант как раз рабочий спасибо.
>46_55_41_44 ©
через дельфи неохота, это медленней, я хочу это через ХП сделать
>Ega23 ©
причем тут вообще FK, речь идет не о контроле ввода, а о том, что требуется добавить в таблицу сразу несколько новых записей, причем первый столбец берется из одной таблицы, а в остальные нужно вписать заданную информацию
Ega23 (2004-08-12 12:45:00) [6]сергей1 (12.08.04 12:07) [5]
Гы-гы-гы! Я так и знал, что это нафиг не нужно! АForeign Keyтебе о чём-нибудь говорит?
46_55_41_44 (2004-08-12 12:31:00) [7]тогда лучше сделать через дельфяк...
С помощью Insert Into Table2 (Field1, Field2, ..., FieldN)
Values
(Value1, Value2, ..., ValueN)
Где Value1..N могут быть данные полей Field1..FieldN таблицы Table1либо любые другие данные!
Отрицательная сторона этого способа в том, что придется N раз ExecSql давать!!! То есть выполнять запрос!
Nikolay M. (2004-08-12 12:16:00) [8]
> сергей1 (12.08.04 12:07) [5]
> нет, не катит, выдает ту-же ошибку :
>
> Subqueries are not allowed in this context.
Кого куда не катит? [2] - работающий вариант.
сергей1 (2004-08-12 12:07:00) [9]нет, не катит, выдает ту-же ошибку :
Subqueries are not allowed in this context.
а нужно это для следующего :
есть 2 таблицы, одна со списком деталей [Деталь], другая с технологией к каждой детали [Технология],
деталь может иметь несколько вариантов с немного разными названиями, например det, det-1, det-2, det-3.
Вот те варианты, которые с черточками, должны иметь ту-же технологию, что и det. Я выбираю запросом такие
детали из первой таблицы, а теперь хочу их вставить во вторую таблицу, но с данными относящимися к det.
>Nikolay M.
при чем тут case ?
вроде как курсорами можно решить, но неужели SQL сам не позволяет такое делать ?
Nikolay M. (2004-08-12 11:50:00) [10]
> Ega23 © (12.08.04 11:37) [3]
Имхо, скоро выяснятся "нюансы", которые потребуют разжевывания, что такое CASE...WHEN :)
Ega23 (2004-08-12 11:37:00) [11]Я к варианту [2] склоняюсь.
Дурацкий вопрос: а нафига?
Соловьев (2004-08-12 11:33:00) [12]может так?
insert into Table2(field1, field2) values
(
(select field1 from Table1),
'another_data'
)
Nikolay M. (2004-08-12 11:33:00) [13]
> insert into Table2 values
> (
> (select field1 from Table1),
> 'another_data'
> )
insert into Table2
select field1, 'another_data' from Table1
?