INSERT INTO TABLE1
(COLUMN1, COLUMN2, COLUMN3, COLUMN4)
VALUES (value1, value2,
(SELECT COLUMN_TABLE2
FROM TABLE2
WHERE COLUMN_TABLE2 like "blabla"),
value4);
insert into StudentCourseMap (StudentId, CourseId)
SELECT Student.Id, Course.Id FROM Student, Course
WHERE Student.Name = 'Paddy Murphy' AND Course.Name = 'Basket weaving for beginners'
26条答案
按热度按时间iyfjxgzm1#
尝试:
这是标准的ansisql,应该适用于任何dbms
它绝对适用于:
Oracle
ms sql服务器
mysql数据库
博士后
sqlite v3版
天睿资讯
db2公司
赛贝斯
眩晕
hsqldb公司
氢气
aws红移
sap hana公司
谷歌扳手
qpgpyjmq2#
claude houle的回答是:应该可以很好地工作,而且还可以有多个列和其他数据:
我只在access、sql2000/2005/express、mysql和postgresql中使用过这种语法,所以应该涵盖这些语法。它还应该与sqlite3一起工作。
j0pj023g3#
在多重值中只得到一个值
INSERT
在另一个表中,我在sqlite3中执行了以下操作:p5fdfcr14#
我看到的这两个答案在informix中都能很好地工作,基本上都是标准sql。即符号:
可以很好地与informix和所有dbms配合使用(在5年或更长的时间以前,mysql并不总是支持这种东西;它现在对这种标准的sql语法有了很好的支持,而且,对这种表示法来说,它还可以工作。)列列表是可选的,但它按顺序指示目标列,因此select结果的第一列将进入第一列,以此类推,在没有列列表的情况下,select结果的第一列进入目标表的第一列。
不同系统之间的区别在于用于标识不同数据库中的表的符号-该标准对数据库间(更不用说数据库间)操作没有任何规定。对于informix,您可以使用以下符号来标识表:
也就是说,您可以指定一个数据库,如果该数据库不在当前服务器中,可以选择标识承载该数据库的服务器,后跟可选的所有者dot,最后是实际的表名。sql标准使用术语schema来表示informix所称的所有者。因此,在informix中,以下任何符号都可以标识一个表:
业主一般不需要报价;但是,如果使用引号,则需要正确拼写所有者名称-它将区分大小写。即:
它们都标识同一个表。对于informix,模式ansi数据库有一点复杂,所有者名称通常转换为大写(informix是例外)。也就是说,在模式ansi数据库(不常用)中,您可以编写:
系统目录中的所有者名称应该是“someone”,而不是“someone”。如果将所有者名称括在双引号中,则其作用类似于分隔标识符。对于标准sql,分隔标识符可以在许多地方使用。使用informix,您只能在所有者名称周围使用它们——在其他上下文中,informix将单引号和双引号字符串都视为字符串,而不是将单引号字符串分隔为字符串,将双引号字符串分隔为分隔标识符(当然,为了完整起见,有一个环境变量delimident,可以设置为任何值,但y是最安全的,它表示双引号总是环绕分隔标识符,单引号总是环绕字符串。)
请注意,mssqlserver设法使用方括号中的[分隔标识符]。在我看来这很奇怪,而且肯定不是sql标准的一部分。
cfh9epnr5#
要在第一个答案中添加一些内容,当我们只需要另一个表中的几条记录(在本例中只有一条)时:
4ioopgfo6#
insert-into和select子查询的两种方法。
使用select子查询返回一行结果。
使用select子查询返回多行结果。
1.使用select子查询返回一行结果的方法。
在这种情况下,它假设select子查询只返回一行基于where条件或sql聚合函数(如sum、max、avg等)的结果,否则它将抛出错误
2.返回多行结果的with select子查询的方法。
第二种方法适用于这两种情况。
bnlyeluc7#
而不是
VALUES
部分INSERT
查询,只需使用SELECT
查询如下。tgabmvqs8#
大多数数据库都遵循基本语法,
我使用的每个数据库都遵循这个语法,
DB2
,SQL Server
,MY SQL
,PostgresQL
ltskdhd19#
这可以在不指定
INSERT INTO
如果要为SELECT
部分。假设table1有两列。此查询应适用于:
这不起作用(对于
col2
(未指定):我正在使用ms sql server。我不知道其他RDM是怎么工作的。
rbl8hiat10#
这是将值与select一起使用的另一个示例:
cygmwpex11#
表列顺序已知时的简单插入:
简单插入列:
当表(#table2)的选定列数等于插入表(table1)时进行批量插入
批量插入当您只想插入到表(表1)的所需列中时:
w8rqjzmb12#
在insert中使用select子句的括号即可。例如:
wbgh16ku13#
下面是另一个使用多个表获取源的示例:
pcww981p14#
下面是如何从多个表中插入。在这个特定的示例中,在多对多场景中有一个Map表:
(我意识到匹配学生姓名可能会返回多个值,但你明白了。当id是标识列且未知时,有必要对id以外的内容进行匹配。)
0yycz8jy15#
这适用于所有dbms