Ms-Access

INSERT INTO with UNION Alias ERROR

  • January 12, 2021

這個問題來自以下文章UNION query not working

失敗:

INSERT INTO AssetControl  
SELECT *  
FROM CSVImport  
UNION SELECT *  
FROM AssetTemp;  

作品:

INSERT INTO AssetControl  
SELECT U.* FROM  
(SELECT * FROM CSVImport  
UNION  
SELECT * FROM AssetTemp) AS U  

我不明白為什麼U需要創建別名才能將記錄成功輸入到AssetControl表中。任何人都可以對此有所了解嗎?

簡短的回答是:訪問很奇怪;)

長答案是 Access 在它支持的 SQL 語法中有一定的限制。它需要一些結構的括號,例如當連接超過 2 個表時。

我認為這裡同樣適用。不是別名是必需的,而是 (Access) 語法在查詢時需要括號,INSERT INTO tableA SelectQueryB;即使SQL 標準不需要它們。我想SelectQuery``UNION**$$ 1 $$**這也有效(並且不需要別名):

INSERT INTO AssetControl  
(SELECT * FROM CSVImport  
UNION  
SELECT * FROM AssetTemp) ;

$$ 1 $$: 看來這也是不允許的。


您的解決方案有效,因為它相當於標準使用INSERT .. SELECT

INSERT INTO AssetControl  
SELECT U.* 
FROM SomeTable AS U ;

whereSomeTable被派生表替換:

(SELECT * FROM CSVImport  
UNION  
SELECT * FROM AssetTemp)

它有點舊,但任何仍在尋求答案的人 - 這應該有效:

INSERT INTO AssetControl  
SELECT * FROM  
(SELECT * FROM CSVImport  
UNION  
SELECT * FROM AssetTemp)

如果仍然沒有,請嘗試在外部SELECT子句中明確命名列,例如:

INSERT INTO AssetControl  
SELECT col1, col2, col3 FROM  
(SELECT * FROM CSVImport  
UNION  
SELECT * FROM AssetTemp)

引用自:https://dba.stackexchange.com/questions/160877