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

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

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

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

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

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

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это означает, что
Код:
INSERT INTO main (field1, field2, field3, field4, field5) Select data1
не прокатит. Прокатит следующее (по общим канонам SQL, для ACCESS не могу утверждать). Результат каждого из вложенных SELECT-ов не может быть множественным, т.е. должен возвращать одно значение и не более одной строки
Код:
INSERT INTO main (field1, field2, field3, field4, field5)
  SELECT data1,
    (SELECT ... FROM ... WHERE ...),
    (SELECT ... FROM ... WHERE ...), 
    (SELECT ...  FROM ... WHERE ...), 
    data5
  FROM ...
  WHERE ...
Огромное спасибо.
Запрос:
INSERT INTO main ( value1, value2, value5, value4, value3 )
SELECT 'тест' as value1, #09/01/2012# as value2, 2 as value5,
(SELECT t1.ID FROM t1 WHERE t1.value2 = True),
SUM (main.value5) FROM main WHERE (main.value2)=#09/01/2012#;

Работает корректно.

Еще последний вопрос:
Возможно ли не выносить эту часть SUM (main.value5) FROM main WHERE (main.value2)=#09/01/2012# в основной селект и указать в подзапросе?
Если да, то что указывается в основном FROM ... WHERE ...?

Такой запрос:
INSERT INTO main ( value1, value2, value5, value4, value3 )
SELECT 'тест' as value1, #09/01/2012# as value2, 2 as value5,
(SELECT t1.ID FROM t1 WHERE t1.value2 = True),
(SELECT SUM (main.value5) FROM main WHERE (main.value2)=#09/01/2012#)
From main;

добавляет количество одинаковых записей равное количеству уже имеющихся в таблице main записей (что логично).
anton__k вне форума Ответить с цитированием
Старый 02.09.2012, 11:41   #22
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Если да, то что указывается в основном FROM ... WHERE ...?
Что вам надо то и указываете. Очевидно же.
eval вне форума Ответить с цитированием
Старый 02.09.2012, 11:49   #23
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Что вам надо то и указываете. Очевидно же.
По смыслу мне уже ничего в этой части не нужно указывать, так как все выборки from были сделаны в подзапросах. Но ничего не указать нельзя.
anton__k вне форума Ответить с цитированием
Старый 02.09.2012, 12:05   #24
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Если вам не нужна main, зачем же вы ее указали? уберите.. либо переписать правильно запрос.
eval вне форума Ответить с цитированием
Старый 02.09.2012, 12:13   #25
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

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

Получается, что один из под запросов всегда должен относится к основному SELECT так как показано в работающем запросе, верно?
anton__k вне форума Ответить с цитированием
Старый 02.09.2012, 12:22   #26
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

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

Цитата:
Сообщение от eval Посмотреть сообщение
Это в документации так сказано?
Это access ругается, и Microsoft говорит, что FROM обязательное выражение.

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

У меня не ругается.
eval вне форума Ответить с цитированием
Старый 02.09.2012, 12:50   #29
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
У меня не ругается.


Можете показать как выглядит запрос у Вас?
anton__k вне форума Ответить с цитированием
Старый 02.09.2012, 12:55   #30
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

INSERT INTO таблица1 ( field1 )
SELECT 'q31231' AS Выражение1;
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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