Ms-Access
INSERT INTO with UNION Alias ERROR
這個問題來自以下文章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 ;
where
SomeTable
被派生表替換:(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)