MS Access SQL:将SELECT INTO与UNION ALL查询一起使用

pla*_*ton 4 sql vba select-into ms-access-2010 union-all

我正在尝试将一堆已经工作的UNION查询变成一系列临时表SELECT INTOVBA过程的一部分。我这样做是因为Access存在性能问题。

当我尝试使用INTO插入的子句运行此查询时,出现以下错误:

"An action query cannot be used as a row source."
Run Code Online (Sandbox Code Playgroud)

我不完全确定为什么我不能执行它,或者不创建更多查询就如何解决它。是什么原因引起的,该如何解决?

SELECT DISTINCT A.*
FROM (SELECT DISTINCT
C.[CUSTOMER CODE], 
D.[FISCAL DAY], 
D.[TY INVOICE DATE] AS [Invoice Date], 
C.[CUSTOMER CODE]&" - "&D.[FISCAL DAY] AS CONCAT, 
IIF(D.[TY INVOICE DATE] Is Not Null, 'TY', Null) As TYLY

***INTO [FD CUST Missing- Temp]***

FROM [QR- CUST FD] AS C,
[QR- FD SALES] AS D) AS A

LEFT JOIN [QR- CUST FD] AS C
ON C.[FD CONCAT] = A.[CONCAT]
WHERE C.[FD CONCAT] Is Null

UNION ALL 

SELECT DISTINCT 
A.*

***INTO [FD Cust Missing- Temp]***

FROM (SELECT DISTINCT
C.[CUSTOMER CODE],
D.[FISCAL DAY],
D.[LY INVOICE DATE] AS [Invoice Date], 
C.[CUSTOMER CODE]&" - "&D.[FISCAL DAY] AS CONCAT, 
IIF(D.[LY INVOICE DATE] Is Not Null, 'LY', Null) As TYLY

FROM [QR- CUST FD] AS C,
[QR- FD SALES] AS D)  AS A

LEFT JOIN [QR- CUST FD] AS C
ON C.[FD CONCAT] = A.[CONCAT]
WHERE C.[FD CONCAT] IS NULL

;
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 5

您遇到错误

动作查询不能用作行源。

因为SELECT ... INTO NewTableName FROM ...查询是不返回结果集的操作查询(例如INSERT,UPDATE或DELETE查询)。因此,UNION ALL没有任何关系。因此,例如,这将不起作用(导致上述错误消息):

    SELECT DISTINCT LastName 
    INTO Foo 
    FROM Clients 
    WHERE LastName LIKE 'D*'
UNION ALL
    SELECT DISTINCT LastName 
    INTO Foo 
    FROM Clients 
    WHERE LastName LIKE 'T*'
Run Code Online (Sandbox Code Playgroud)

但是,您可以按以下方式重新组织该查询,该查询确实有效:

SELECT *
INTO Foo
FROM
    (
        SELECT DISTINCT LastName 
        FROM Clients 
        WHERE LastName LIKE 'D*'
    UNION ALL
        SELECT DISTINCT LastName 
        FROM Clients 
        WHERE LastName LIKE 'T*'
    )
Run Code Online (Sandbox Code Playgroud)