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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2012, 16:01   #11
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Если данные в main и t1 связаны, то джойнить, иначе
insert into table (field1, ..)
select data1, select data4 from main ..., select data5 from t1...
и учесть что внутренние селекты должны возвращать только 1 значение
или вариации
eval вне форума Ответить с цитированием
Старый 01.09.2012, 21:52   #12
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Если данные в main и t1 связаны, то джойнить, иначе
insert into table (field1, ..)
select data1, select data4 from main ..., select data5 from t1...
и учесть что внутренние селекты должны возвращать только 1 значение
или вариации
Не разрешает Access выполнять такой запрос:
INSERT INTO main (value4, value3)
SELECT t1.ID FROM t1 WHERE t1.value2 = True, SELECT SUM (main.value5) FROM main WHERE (main.value2)=#09/01/2012#;

INSERT INTO ... SELECT - пожалуйста, INSERT INTO ... SELECT ..., SELECT ..., - нельзя.

Последний раз редактировалось anton__k; 01.09.2012 в 21:58.
anton__k вне форума Ответить с цитированием
Старый 01.09.2012, 22:19   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А как ACCESS к такому отнесется
Код:
INSERT INTO  ...
  SELECT *
    FROM (
      SELECT .. FROM ...
      UNION
      SELECT .. FROM ...
      UNION
      ...    )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.09.2012, 23:54   #14
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Цитата:
Не разрешает Access выполнять такой запрос:
Конечно не поймет, я вам смовсем другое писал.
eval вне форума Ответить с цитированием
Старый 02.09.2012, 09:17   #15
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А как ACCESS к такому отнесется
Код:
INSERT INTO  ...
  SELECT *
    FROM (
      SELECT .. FROM ...
      UNION
      SELECT .. FROM ...
      UNION
      ...    )
Относится вот так:

--------------------------------------------------------------------


Результаты тех же запросов SELECT отдельно:


--------------------------------------------------------------------

Последний раз редактировалось anton__k; 02.09.2012 в 09:23.
anton__k вне форума Ответить с цитированием
Старый 02.09.2012, 09:21   #16
anton__k
Пользователь
 
Регистрация: 01.09.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
иначе
insert into table (field1, ..)
select data1, select data4 from main ..., select data5 from t1...
и учесть что внутренние селекты должны возвращать только 1 значение
или вариации
Цитата:
Сообщение от anton__k Посмотреть сообщение
INSERT INTO main (value4, value3)
SELECT t1.ID FROM t1 WHERE t1.value2 = True, SELECT SUM (main.value5) FROM main WHERE (main.value2)=#09/01/2012#;
Цитата:
Сообщение от eval Посмотреть сообщение
Конечно не поймет, я вам смовсем другое писал.
В чем именно отличие?
anton__k вне форума Ответить с цитированием
Старый 02.09.2012, 09:58   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

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

Цитата:
Сообщение от Аватар Посмотреть сообщение
Количество элементов в списке полей INSERT и SELECT-а должно совпадать и данные по типам соответствовать. Это относится и к SELECT-ам из UNION.
Если я правильно понимаю смысл использования SELECT UNION SELECT - то это добавление нескольких записей (строк) одним запросом.

Соответственно для моей задачи это не совсем применимо.

На текущий момент получается что я могу добавить любое количество фиксированных (известных) значений и только одно значение - результат запроса.
Мне нужно чтобы в одном запросе на добавление (добавляющем одну запись) было любое количество фиксированных значение и любое количество результатов разных SELECT'ов (каждый из которых возвращает одно значение).

т.е. что то вроде:
INSERT INTO main (field1, field2, field3, field4, field5)
Select data1, SELECT ? FROM ? WHERE ?, SELECT ? FROM ? WHERE ?, SELECT ? FROM ? WHERE ?, select data5;

В противном случае мне придется сначала выполнять отдельно каждый SELECT, запоминать полученное значение в переменной, а потом писать запрос:
INSERT INTO main (field1, field2, field3, field4, field5)
VALUES data1, переменная1, переменная2, переменная3, data5; - чего делать не очень хочется т.к. вместо одного запроса получаем четыре запроса и 3 переменных (только в этом примере).

Последний раз редактировалось anton__k; 02.09.2012 в 10:40.
anton__k вне форума Ответить с цитированием
Старый 02.09.2012, 10:55   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Количество элементов в списке полей INSERT и SELECT-а должно совпадать
Это означает, что
Код:
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 ...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.09.2012, 10:59   #20
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Цитата:
В чем именно отличие?
Селект под инсертом должен быть один, а вы кучу кидаете, так нельзя. Я словами про это сказал, т.е. 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