选择具有不同列名的表

Posted

技术标签:

【中文标题】选择具有不同列名的表【英文标题】:select into a table with different column names 【发布时间】:2012-05-20 13:59:36 【问题描述】:

在 SQL 中,Select into ... 将行复制到不同的(备份)表中。如果备份表具有不同的结构(或不同的列名),这可能吗?如果没有,实现这一目标的最佳方法是什么?

这是我想要做的:TableA 有列 a1,a2,a3。我想将此表中的一些行复制到另一个表TableB,该表具有列b1,b2,b3,b4a1的内容进入b1a2b2

【问题讨论】:

哪种风格的 SQL?我能找到的唯一一个SELECT..INTO 是 MS-SQL,它的文档暗示它将创建一个新表——它应该始终具有“正确”的结构。 谢谢你的意见。我正在研究sqlite。我不确定“选择到...”是否在 sqlite 中有效。我刚刚尝试过,它在 sqlite 中不起作用。但是“插入..”适用于此。 【参考方案1】:

列名根本不重要,只要数据类型匹配(或者可以在赋值中强制转换)。

如果列的数据类型不匹配,请尝试相应地转换值。 试试小虚拟桌子。请务必明确列出目标列以避免混淆。像这样:

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

SQLite 手册here 中的更多详细信息。

【讨论】:

如果不指定这样的列名,我们就不能这样做...... INSERT INTO payment_reject_reasons SELECT * FROM de_list_reasons 这给了我一个错误...... @user1179459:如果行类型匹配,您可以做到这一点。如果你得到一个错误,他们显然不会。此外,这种形式仅适用于临时命令和特殊情况。通常您应该拼出所涉及的列,因此如果您将列添加到其中一个表中,该命令不会中断。我添加了手册的链接。

以上是关于选择具有不同列名的表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用不同的表和不同的列名连接多个查询

连接两个具有不同键名的表

如何在 MySQL 中找到所有具有特定列名的表?

从表名中选择计数不同的列名作为cnt

使用 SQL 和 Sqlalchemy 查询的表具有相同的列名

选择所有具有匹配列名的表