Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / INSERT INTO..(SELECT..UNION ALL) / 6 сообщений из 6, страница 1 из 1
29.10.2015, 10:22
    #39089623
DON_DON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO..(SELECT..UNION ALL)
Добрый день!
Помогите пожалуйста с запросом

INSERT INTO TempВопрос ( IdВопрос, НомерВопроса, Вопрос, IdПравОтвет, НомерПравильныйОтвет, idСтудент )
SELECT Вопросы.IdВопрос, Вопросы.НомерВопроса, Вопросы.Вопрос, Вопросы.IdПравОтвет,Вопросы.НомерПравильныйОтвет,Вопросы.idСтудент
FROM
(SELECT TOP 4 *,Вопросы.IdВопрос, Вопросы.НомерВопроса, Вопросы.Вопрос, Вопросы.IdПравОтвет, Вопросы.НомерПравильныйОтвет, 116 as idСтудент FROM Вопросы WHERE Вопросы.id_RD = 1
ORDER BY rnd(INT(NOW*Вопросы.IdВопрос)-NOW*Вопросы.IdВопрос)
UNION ALL
SELECT TOP 3 *,Вопросы.IdВопрос, Вопросы.НомерВопроса, Вопросы.Вопрос, Вопросы.IdПравОтвет, Вопросы.НомерПравильныйОтвет, 116 as idСтудент FROM Вопросы WHERE Вопросы.id_RD = 2
ORDER BY rnd(INT(NOW*Вопросы.IdВопрос)-NOW*Вопросы.IdВопрос)
) AS Вопросы;

Выдает ошибку
В выражении ORDER BY rnd(INT(NOW*Вопросы.IdВопрос)-NOW*Вопросы.IdВопрос) включены поля, не отобранные запросом.Выражение ORDER BY может содержать только поля, затребованные первым запросом.

первый select отрабатывает хорошо с rnd, а на втором выдает ошибку.
...
Рейтинг: 0 / 0
29.10.2015, 10:42
    #39089669
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO..(SELECT..UNION ALL)
Попробуйте убрать первый ORDER BY (красным).
Для UNION указывается однократно - в последней части.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
INSERT INTO TempВопрос ( IdВопрос, НомерВопроса, Вопрос, IdПравОтвет, НомерПравильныйОтвет, idСтудент )
SELECT Вопросы.IdВопрос, Вопросы.НомерВопроса, Вопросы.Вопрос, Вопросы.IdПравОтвет,Вопросы.НомерПравильныйОтвет,Вопросы.idСтудент
FROM
(SELECT TOP 4 *,Вопросы.IdВопрос, Вопросы.НомерВопроса, Вопросы.Вопрос, Вопросы.IdПравОтвет, Вопросы.НомерПравильныйОтвет, 116 as idСтудент FROM Вопросы WHERE Вопросы.id_RD = 1
ORDER BY rnd(INT(NOW*Вопросы.IdВопрос)-NOW*Вопросы.IdВопрос)
UNION ALL
SELECT TOP 3 *,Вопросы.IdВопрос, Вопросы.НомерВопроса, Вопросы.Вопрос, Вопросы.IdПравОтвет, Вопросы.НомерПравильныйОтвет, 116 as idСтудент FROM Вопросы WHERE Вопросы.id_RD = 2
ORDER BY rnd(INT(NOW*Вопросы.IdВопрос)-NOW*Вопросы.IdВопрос)
) AS Вопросы;
...
Рейтинг: 0 / 0
29.10.2015, 10:50
    #39089687
DON_DON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO..(SELECT..UNION ALL)
__Michelle,

Ту же ошибку выдает
...
Рейтинг: 0 / 0
29.10.2015, 10:59
    #39089699
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO..(SELECT..UNION ALL)
DON_DON,

Чтобы не сильно заморачиваться, просто, уйти от UNION. Сделай 2 инсерта
...
Рейтинг: 0 / 0
29.10.2015, 11:30
    #39089772
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO..(SELECT..UNION ALL)
DON_DON,

Что такое NOW?
...
Рейтинг: 0 / 0
29.10.2015, 12:12
    #39089846
INSERT INTO..(SELECT..UNION ALL)
Для UNION действуют такие правила:
1. Имена полей берутся из первого запроса
2. Сортировка берется из последнего.

Причем в сортировке нужно указывать только имена полей (без имен таблиц) и указанные поля должны присутствовать в возвращаемом наборе каждого запроса. Во многих случаях это невозможно.

Попробуйте добавить в UNION еще один запрос без сортировки, не возвращающий записей.
например:
Код: sql
1.
2.
3.
4.
...
UNION ALL
SELECT TOP 3 *, Вопросы.IdВопрос, Вопросы.НомерВопроса, Вопросы.Вопрос, Вопросы.IdПравОтвет, Вопросы.НомерПравильныйОтвет, 0 as idСтудент  FROM Вопросы WHERE 1 = 2
...

Кстати, выделенное во всех запросах, входящих в ваш UNION - лишнее.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / INSERT INTO..(SELECT..UNION ALL) / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]