使用不同列名将数据选择插入表中

33
在SQL中,Select into ...会将行复制到一个不同的(备份)表中。如果备份表具有不同的结构(或不同的列名称),是否可以实现此操作?如果不能,那么最好的方法是什么?
以下是我想要做的事情:TableA拥有列a1、a2、a3。我想将这个表中的一些行复制到另一个名为TableB的表中,该表具有列b1、b2、b3、b4。将a1的内容复制到b1a2复制到b2等。

哪种SQL版本?我只能找到一个带有SELECT..INTO的MS-SQL版本,并且它的文档表明它将创建一个新表 - 这个新表应该始终具有“正确”的结构。 - millimoose
谢谢你的建议。我正在处理sqlite。我不确定"Select into..."在sqlite中是否有效。我刚试了一下,它在sqlite中无法工作。但是"Insert into..."可以实现这个功能。 - zolio
1个回答

63

只要数据类型匹配(或可以转换为赋值),列名完全不重要。

如果列的数据类型不匹配,请尝试相应地转换值。使用小型虚拟表进行测试。一定要明确列出目标列,以避免混淆。像这样:

INSERT INTO TableB (b1, b2, b3)
SELECT a1, a2, a3
FROM   TableA
WHERE  <some condition>;

SQLite手册中此处详细介绍。


我们能不能不像这样指定列名就做到这一点呢?... INSERT INTO payment_reject_reasons SELECT * FROM de_list_reasons这会导致错误。 - mahen3d
1
@user1179459:如果行类型匹配,您可以这样做。如果出现错误,则显然不匹配。此外,此形式仅适用于特殊情况和即席命令。通常,您应该拼写涉及的列,这样如果您向其中一个表添加列,命令就不会中断。我添加了一个链接到手册。 - Erwin Brandstetter

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