2015-11-04 2 views
0

Я борюсь с MS Access 2010 SQL. Может ли кто-нибудь понять, почему следующий SQL-оператор создаст «Синтаксическую ошибку в предложении FROM»?SQL Union ALL «Синтаксис Eror in From From»

INSERT INTO Attendance 
SELECT [AttendanceData].Student, [AttendanceData].[10/1/2015] AS AttendValue, 
"10/1/15" AS AttendDate 
FROM [AttendanceData] 
UNION ALL 
SELECT [AttendanceData].Student, [AttendanceData].[10/2/2015] AS AttendValue, 
"10/2/15" As AttendDate 
FROM [AttendanceData]; 

Отдельные заявления работают хорошо, но в сочетании с UNION ALL, я получаю

Синтаксическая ошибка в предложении FROM.»

Любая помощь будет высоко ценится!

Спасибо.

+0

какие столбцы в 'Attendance' таблицы? –

+0

См. Синтаксическую ошибку ['FROM', связанную с огромным предложением UNION] (http://stackoverflow.com/questions/17284174/from-syntax-error-involved-with-huge-union-clause) – Marusyk

+0

И используйте правильное строковое выражение для вашего значения даты: '# 2015/10/2 # As AttendDate' – Gustav

ответ

1

Попробуйте использовать что-то как то:

INSERT INTO Attendance 
SELECT R.Student, R.AttendValue, R.AttendDate 
FROM 
(
    (SELECT [AttendanceData].Student, [AttendanceData].[10/1/2015] AS AttendValue, 
    "10/1/15" AS AttendDate 
    FROM [AttendanceData]) 

    UNION ALL 

(SELECT [AttendanceData].Student, [AttendanceData].[10/2/2015] AS AttendValue, 
    "10/2/15" As AttendDate 
    FROM [AttendanceData]) 
) AS R 
0

В MS Access Jet/ACE SQL, вы не можете использовать накидной запрос непосредственно в запросе добавления. Вы увидите, что отладчик запроса подсвечивает оператор UNION ALL.

Сохраните запрос объединения отдельно в качестве хранимого объекта запроса, а затем используйте его в операторе запроса SELECT.

INSERT INTO Attendance 
SELECT * FROM UnionAttendance 

В качестве альтернативы можно использовать производную таблицу:

INSERT INTO Attendance 
SELECT * 
FROM ( 
    SELECT [AttendanceData].Student, [AttendanceData].[10/1/2015] AS AttendValue, 
    "10/1/15" AS AttendDate 
    FROM [AttendanceData] 
    UNION ALL 
    SELECT [AttendanceData].Student, [AttendanceData].[10/2/2015] AS AttendValue, 
    "10/2/15" As AttendDate 
    FROM [AttendanceData] 
);