C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
ID при Insert, Генератор при Insert Into <>Select<>
gen
Отправлено: 01.05.2004, 11:14


Дежурный стрелочник

Группа: Участник
Сообщений: 36



Привет всем!

Очень нужна посказка в составлении елементарного запроса.

Проблема в следующем:
есть таблица — Tab (5 полей: id,Fld1,Fld2,Fld3,Fld4) + генератор id (+1 before Insert)
есть другие 2 таблицы — Srs1,Srs2

составляется запрос на вставку из Srs1 и Srs2 выборки полей соответсвующих таблице Tab:

INSERT INTO tab SELECT Srs1.Fld1,Srs1.Fld2,Srs2.Fld3,Srs2.Fld4 FROM Srs1,Srs2

Но в таком виде запрос вызывает ошибку 804 — несоответствие количества значений количеству полей.
Как реализовать в таком запросе автоматическое заполение поля id?
И почему в запросе типа INSERT INTO <> (...)VALUES(...), при наличии генератора id соответстующее поле заполняется автоматически,
а в запросе типа INSERT INTO <> SELECT <> это вызывает ошибку?

Буду весьма признателен за посказку.
olegenty
Отправлено: 03.05.2004, 07:10


Ветеран

Группа: Модератор
Сообщений: 2412



INSERT INTO tab (Fld1, Fld2, Fld3, Fld4)
select Srs1.Fld1,Srs1.Fld2,Srs2.Fld3,Srs2.Fld4 FROM Srs1,Srs2

м всё заработает.
но, ты меня пугаешь: FROM Srs1, Srs2 — это ж что получается, ты их не объединяешь? ты сам-то понимаешь, СКОЛЬКО записей реально будет, если в каждой из таблиц хотя бы по вшивой 1000 записей окажется.

короче, JOIN втыкай, а так у тебя CROSS JOIN так называемый получается, или, в лучшем случае, FULL OUTER JOIN, что тоже не сахар...
** gen
Отправлено: 03.05.2004, 09:07


Не зарегистрирован







Привет!

Примного благодарен за подсказку.
Все работает как надо.
По поводу объединения волноваться не приходится — в реальном запросе речь идет о тривиальной выборке из справочников подразделений и персонала этих подразделений по определенным условиям — в результате получается всего несколько записей.
olegenty
Отправлено: 03.05.2004, 10:14


Ветеран

Группа: Модератор
Сообщений: 2412



ок. smile.gif
я просто уже забыл, что некоторые вместо JOIN ON пишут условия объединения в WHERE.

Вернуться в Работа с базами данных в C++Builder