Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2012, 11:12   #1
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию Запрос на добавление

Доброго времени суток.
Есть БД Access с двумя таблицами.
Необходимо добавить в основную таблицу результат подзапроса к вспомогательной, набор фиксированных значений и результат суммирования значений одного из полей основной таблицы.
Не получается сделать это одним запросом.

Примеры 2х запросов:

INSERT INTO main ( value1, value2, value5, value4, value3 )
SELECT 'тест' AS value1, #09/01/2012# AS value2, 2 AS value5, 4 AS value4, SUM (main.value5)
FROM main
WHERE (main.value2)=#09/01/2012#;

и

INSERT INTO main ( value1, value2, value5, value4 )
SELECT 'тест' AS value1, #09/01/2012# AS value2, 2 AS value5, t1.ID
FROM t1
WHERE t1.value2 = True;

Подскажите каким образом можно объединить это в один запрос?
Файл БД прилагается.
Вложения
Тип файла: rar Database1.rar (12.7 Кб, 7 просмотров)
anton__k вне форума Ответить с цитированием
Старый 01.09.2012, 11:48   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Не нужные действия в принципе.
eval вне форума Ответить с цитированием
Старый 01.09.2012, 11:50   #3
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

Не совсем понял.
anton__k вне форума Ответить с цитированием
Старый 01.09.2012, 12:13   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

зачем хранить одно и тоже несколько раз?
eval вне форума Ответить с цитированием
Старый 01.09.2012, 12:23   #5
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

Это пример.
Фиксированные значения запроса в целевом варианте передаются в него из формы приложения и вводятся пользователем, дело не в них.
Проблема в обработке данных самой бд, т.е. запрос вида:
INSERT INTO main ( value1, value2, value5, value4, value3 )
SELECT 'тест' AS value1, #09/01/2012# AS value2, 2 AS value5, t1.ID FROM t1 WHERE t1.value2 = True, SUM (main.value5) FROM main WHERE (main.value2)=#09/01/2012#;

не работоспособен.

Так же не работоспособен (на примере первого запроса) вариант, если переставить местами добавляемые данные:
INSERT INTO main ( value1, value2, value5, value3, value4 )
SELECT 'тест' AS value1, #09/01/2012# AS value2, 2 AS value5, SUM (main.value5) FROM main WHERE (main.value2)=#09/01/2012#, 4 AS value4;

Во всех примерах в сети запросы INSERT SELECT представлены с одним подзапросом.
Каким образом в добавляемые данные запроса на добавление вставить результат нескольких (2 и более) подзапросов?

Последний раз редактировалось anton__k; 01.09.2012 в 12:33.
anton__k вне форума Ответить с цитированием
Старый 01.09.2012, 14:50   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Цитата:
Проблема в обработке данных самой бд, т.е. запрос вида:
не работоспособен.
Так он кривой, с чего ему быть способным?
И второй тоже.
eval вне форума Ответить с цитированием
Старый 01.09.2012, 15:12   #7
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

По поводу второго ошибка понятна.

Мне нужно получить запрос вида:

Добавить в таблицу 1 (поле1, поле 2, поле3, поле4 и т.д.)
Значения (значение1, значение2, значени3, значени4).

при этом любое из значений может быть задано явно или быть результатом полученным в результате запроса к любой из таблиц БД.

например значение4 можно задать явно числом 4.
так же число 4 получается в результате запроса SELECT t1.ID FROM t1 WHERE (((t1.value2)=True)).
какой должен быть синтаксис, чтобы вместо числа вставить запрос?
вместо всех явных значений использовать разные запросы SELECT, возвращающие по одному значению?

Это вообще возможно? или всегда необходимо выполнять каждый select отдельно, запоминать результат и вставлять его в INSERT??

Последний раз редактировалось anton__k; 01.09.2012 в 15:15.
anton__k вне форума Ответить с цитированием
Старый 01.09.2012, 15:38   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Цитата:
какой должен быть синтаксис, чтобы вместо числа вставить запрос?
insert into table (field1, ..)
select data1, .. [from .. where ..]
eval вне форума Ответить с цитированием
Старый 01.09.2012, 15:49   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Все возможно. Сначала отладить SELECT с нужными данными, а потом присепить его к INSERT
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.09.2012, 15:57   #10
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
insert into table (field1, ..)
select data1, .. [from .. where ..]
В этом случае у нас будет один подзапрос (или к таблице t1 или main).

Как быть с конкретным примером:
INSERT INTO main ( value1, value2, value5, value4, value3 )
SELECT data1, data2, data3, data4, data5;

при этом:
data4 = результат запроса SELECT SUM (main.value5)
FROM main
WHERE (main.value2)=#09/01/2012#;

а data5 = результат запроса SELECT t1.ID
FROM t1
WHERE t1.value2 = True;
anton__k вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на добавление Slame Помощь студентам 4 20.11.2011 23:01
Запрос на добавление Slame Microsoft Office Access 3 15.11.2011 11:24
Запрос на добавление Insightful Microsoft Office Access 9 30.04.2010 18:17
Добавление (запрос) warshadow Microsoft Office Access 8 23.10.2009 01:15
запрос на добавление William Microsoft Office Access 3 13.07.2007 22:00