为了账号安全,请及时绑定邮箱和手机立即绑定

插入…值(选择…)来自…)

插入…值(选择…)来自…)

大话西游666 2019-06-01 10:51:19
插入…值(选择…)来自…)
查看完整描述

4 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

试着:

INSERT INTO table1 ( column1 )SELECT  col1FROM    table2

这是标准的ansi sql,应该在任何dbms上工作。

它确实适用于:

  • 甲骨文
  • MS SQL Server
  • MySQL
  • 波斯特格斯
  • SQLite v3
  • 特拉塔
  • DB2
  • 赛贝斯
  • 维蒂卡
  • HSQLDB
  • AWS红移
  • SAP HANA


查看完整回答
反对 回复 2019-06-01
?
心有法竹

TA贡献1866条经验 获得超5个赞

在多个值中只获得一个值INSERT在另一个表中,我在SQLite 3中完成了以下操作:

INSERT INTO column_1 ( val_1, val_from_other_table ) VALUES('val_1', (SELECT  val_2 FROM table_2 WHERE val_2 = something))


查看完整回答
反对 回复 2019-06-01
?
PIPIONE

TA贡献1829条经验 获得超9个赞

我看到的这两个答案在Informix中都很好,而且基本上都是标准SQL。也就是说,表示法:

INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;

使用Informix和所有DBMS都很好。(5年前或更多年前,MySQL并不总是支持这类东西;它现在对这种标准SQL语法有很好的支持,AFAIK在这种表示法上可以正常工作。)列列表是可选的,但按顺序指示目标列,因此SELECT结果的第一列将进入第一列,以此类推。如果没有列表,则选择结果的第一列进入目标表的第一列。

系统之间的不同之处在于用于标识不同数据库中的表示法-对于数据库间操作(更不用说数据库间数据库管理系统),该标准没有什么可说的。使用Informix,您可以使用以下符号来标识表:

[dbase[@server]:][owner.]table

也就是说,您可以指定一个数据库,如果数据库不在当前服务器中,则可以选择标识承载该数据库的服务器,然后是可选的所有者点,最后是实际的表名。SQL标准使用术语模式来表示Informix所称的所有者。因此,在Informix中,下列任何一个符号都可以识别一个表:

table"owner".tabledbase:tabledbase:owner.tabledbase@server:tabledbase@server:owner.table

所有者一般不需要被引用;但是,如果您确实使用了引号,则需要将所有者名拼写正确-它会区分大小写。即:

someone.table"someone".tableSOMEONE.table

都能识别出同一张表。使用Informix,模式ANSI数据库有一个轻微的复杂性,其中所有者名称通常转换为大写(Informix是例外)。也就是说,在模式ANSI数据库(不常用)中,您可以编写:

CREATE TABLE someone.table ( ... )

系统目录中的所有者名称将是“某人”,而不是“某人”。如果将所有者名称括在双引号中,则它的作用类似于分隔标识符。使用标准SQL,可以在许多地方使用分隔标识符。使用Informix,您可以只在所有者名称周围使用它们-在其他上下文中,Informix将单引号和双引号字符串视为字符串,而不是将单引号字符串和双引号字符串分隔为分隔标识符。(当然,为了完整起见,有一个环境变量DELIMIDENT,它可以被设置为任何值,但Y是最安全的,它表明双引号总是环绕分隔标识符,单引号总是围绕字符串。)

请注意,MSSQLServer设法使用方括号中的[分隔标识符]。在我看来,这看起来很奇怪,而且肯定不是SQL标准的一部分。


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 580 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信