|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.09.2012, 11:12 | #1 |
Пользователь
Регистрация: 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; Подскажите каким образом можно объединить это в один запрос? Файл БД прилагается. |
01.09.2012, 11:48 | #2 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Не нужные действия в принципе.
|
01.09.2012, 11:50 | #3 |
Пользователь
Регистрация: 01.09.2012
Сообщений: 22
|
Не совсем понял.
|
01.09.2012, 12:13 | #4 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
зачем хранить одно и тоже несколько раз?
|
01.09.2012, 12:23 | #5 |
Пользователь
Регистрация: 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. |
01.09.2012, 14:50 | #6 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Цитата:
И второй тоже. |
|
01.09.2012, 15:12 | #7 |
Пользователь
Регистрация: 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. |
01.09.2012, 15:38 | #8 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Цитата:
select data1, .. [from .. where ..] |
|
01.09.2012, 15:49 | #9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Все возможно. Сначала отладить SELECT с нужными данными, а потом присепить его к INSERT
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
01.09.2012, 15:57 | #10 |
Пользователь
Регистрация: 01.09.2012
Сообщений: 22
|
В этом случае у нас будет один подзапрос (или к таблице 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; |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запрос на добавление | 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 |