如何将选择的SQL查询结果转换为MS Access中的新表

13
如何将MSAccess中select语句查询结果转换为新表?
5个回答

15

你可以使用子查询

SELECT a,b,c INTO NewTable 
FROM (SELECT a,b,c
FROM TheTable
WHERE a Is Null)

2
为什么要使用子查询?即为什么不将INTO添加到内部查询中? - onedaywhen
请注意,生成的“表”将没有键,因此根本不是表。 - onedaywhen

9

像这样:

SELECT    *
INTO      NewTable
FROM      OldTable

不确定 Access 在那种情况下是否会真正“替换” NewTable,它实际上可能会将内容追加到表中,这样就完全符合我所理解的用户请求。 - Romain
@Romain Muller:为什么不启动Access并找出你的问题的答案,而不是大声嘟囔呢? - David-W-Fenton
3
实际上,如果你在Access QBE中运行这个SQL语句,它会询问你是否要替换现有的表。如果你使用DoCmd.RunSQL并将SetWarnings设置为ON来运行它,它也会提示你。如果你尝试在DAO中执行它,它将失败,因为该表已经存在。无论哪种情况下,它都不会将记录追加到现有表中。 - David-W-Fenton

3
首先,创建一个包含所需键、约束、域检查、引用等的表。然后使用INSERT INTO..SELECT结构来填充它。
不要被SELECT..INTO..FROM结构所诱惑。生成的表将没有键,因此实际上根本不是一个表。最好从一个正确的表开始添加数据,例如,将更容易捕获坏数据。
关于SELECT..INTO子句出现问题的示例:它可能会导致一个包括NULL值的列,而在事后,你可以将该列更改为NOT NULL,但引擎不会替换NULL值,因此你最终将得到一个包含NULL的NOT NULL列!
还要考虑创建一个“viewed”表,例如使用CREATE VIEW SQL DDL,而不是基本表。

2

如果您想通过用户界面完成,也可以:

A)创建并测试选择查询。保存它。

B)创建一个制表查询。当被询问要显示哪些表时,请选择查询选项卡和您保存的查询。

C)告诉它您想创建的表的名称。

D)去冲杯咖啡(根据口味和表的大小而定)。


0
Select *
Into newtable
From somequery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接