使用 insert into ... select 会导致 select 附近的语法不正确,为啥?

     2023-05-08     262

关键词:

【中文标题】使用 insert into ... select 会导致 select 附近的语法不正确,为啥?【英文标题】:Using insert into ... select results in a incorrect syntax near select, why?使用 insert into ... select 会导致 select 附近的语法不正确,为什么? 【发布时间】:2011-06-06 16:12:46 【问题描述】:

如何在 INSERT 操作中进行 SELECT?

insert into tableX (a_id, b_id) 
VALUES ((SELECT service_id 
         FROM tableY 
         WHERE id = 10, 2));

但是服务器返回语法错误,为什么?

SQL Error [156] [S0001]: Incorrect syntax near the keyword 'select'.

【问题讨论】:

【参考方案1】:

虽然我最初的答案给出了一个可行的解决方案,但实际上我对错误原因的理解是错误的。在 VALUES 子句中使用标量子查询没有任何问题。问题中陈述的问题只是一个括号放错了位置。标量子查询必须用括号括起来。

这应该可行:

insert into tableX (a_id, b_id) 
VALUES (
  (SELECT service_id 
         FROM tableY 
         WHERE id = 10)
  , 2
  );

原答案

VALUES 只能与文字值一起使用。但是,字面量值可以在子查询中使用。这样做:

insert into tableX (a_id, b_id) SELECT service_id, 2 FROM tableY WHERE id = 10

【讨论】:

【参考方案2】:

您不需要 values 关键字,也可以在选择列表中为 b_id 列添加默认值 2,而不是在 SELECT 语句之后添加它

试试这个:

INSERT INTO tableX (a_id, b_id) 
SELECT service_id, 2 
  FROM tableY 
 WHERE id = 10

【讨论】:

【参考方案3】:

您不需要values 字。

这里有一些mysql的文档

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

此外,当您指定应插入值的列时,您需要确保您的选择返回与您指定的内容相同的数字/类型。

【讨论】:

【参考方案4】:

您告诉 DBMS 您正在插入两个值(a_id、b_id)但只选择一个(service_id)。

【讨论】:

不完全——尽管他的括号放错了位置,但我认为,2 应该是第二个值。【参考方案5】:

试试:

insert into tableX (a_id, b_id)
SELECT service_id, 4 as QUESTIONMARK FROM tableY WHERE id in (10, 2);

这适用于许多数据库引擎,但我们不知道您正在使用什么环境。

编辑:第二个插入应该是什么?

【讨论】:

【参考方案6】:

MySQL 中可以插入动态值。这是示例:

INSERT INTO Item_Info (`Back_Ground_Color`,) 
VALUES ( (select concat('#',SUBSTRING((lpad(hex(round(rand() * 10000000)),6,0)),-6))));

【讨论】:

这不能回答问题

使用 select 语句编写 Sql insert into 语句

】使用select语句编写Sqlinsertinto语句【英文标题】:WrtingSqlinsertintostatementusingselectstatement【发布时间】:2012-10-1817:07:14【问题描述】:我想从表(item2)和不在item2表中的日期向表(item1)插入一些值。如何使用select语句编写SQL插入语句... 查看详情

如何将 SQL INSERT INTO SELECT 与 codeigniter 一起使用

】如何将SQLINSERTINTOSELECT与codeigniter一起使用【英文标题】:howtousingSQLINSERTINTOSELECTwithcodeigniter【发布时间】:2019-06-1915:06:49【问题描述】:如何在CodeIgniter中使用SQL插入到select中。型号...publicfunctionhistory($book_id)$query=$this->db->q... 查看详情

NamedParameterJdbcTemplate 无法执行 insert into select

...select【发布时间】:2020-02-2102:26:07【问题描述】:我正在使用informix,我正在尝试使用spring从java执行一个简单的查询。这是查询。INSERTINTOtable1SELECTval1,val2, 查看详情

使用 insert into select 将源列添加到输出子句

】使用insertintoselect将源列添加到输出子句【英文标题】:Addsourcecolumnstooutputclausewithinsertintoselect【发布时间】:2020-10-0105:00:41【问题描述】:我的c#代码调用存储过程并将tvp作为参数传递给storerd过程。我需要将接收到的数据插入... 查看详情

如何使用 PrepareStatement 在 Java 中执行 INSERT SELECT INTO

】如何使用PrepareStatement在Java中执行INSERTSELECTINTO【英文标题】:HowtodoINSERTSELECTINTOinJavausingPrepareStatement【发布时间】:2015-12-2318:11:12【问题描述】:我正在尝试通过从2个表中选择列中的特定数据来执行插入到1个表中的INSERTINTOSELE... 查看详情

如何修复 INSERT INTO SELECT 组功能错误

...:我现在正在学习oracleSQL,但我遇到了一个问题,我必须使用INSERTINTOSELECT语句来根据查询填充表。我需要在表格中填充与收入低于公司平均工资并至少从事两个项目的员工相关的信息。下面是我正在使用的表格和我的代码 查看详情

MS Access 使用 SQL INSERT INTO - SELECT FROM 插入记录

】MSAccess使用SQLINSERTINTO-SELECTFROM插入记录【英文标题】:MSAccessinsertingrecordsusingSQLINSERTINTO-SELECTFROM【发布时间】:2020-12-2118:07:51【问题描述】:我不熟悉使用RDB并尝试使用VB.NET中的SQL(使用System.Data.oledb命名空间)将数据插入表中... 查看详情

INSERT INTO WITH SELECT 和 WHERE(问题)

...oblem)【发布时间】:2021-03-2215:05:33【问题描述】:我需要使用select执行插入,但DBEAVER返回以下错误:SQL错误[904][42000]:ORA-00904:“NR_CARTEIRA”:标识符无效有谁知道它是什么?INSERTINTOrecem_nascido(DT 查看详情

INSERT INTO ndbtable SELECT FROM 表在 MySQL 集群中使用了荒谬的内存量

】INSERTINTOndbtableSELECTFROM表在MySQL集群中使用了荒谬的内存量【英文标题】:INSERTINTOndbtableSELECTFROMtableusesridiculousamountsofmemoryinMySQLCluster【发布时间】:2013-10-2403:04:57【问题描述】:如果我将300,000行从表(innodb或ndb)移动到ndb表中... 查看详情

INSERT INTO 表 SELECT 和 SELECT INTO 表之间的性能差异 [重复]

】INSERTINTO表SELECT和SELECTINTO表之间的性能差异[重复]【英文标题】:PerformancedifferencebetweenINSERTINTOtableSELECTandSELECTINTOtable[duplicate]【发布时间】:2016-08-0108:32:17【问题描述】:我有两个问题。第一个是:SELECTTbl.Col.value(\'ID[1]\',\'INT\')... 查看详情

INSERT INTO SELECT 很慢,但是单独运行时 INSERT 或 SELECT 很快

】INSERTINTOSELECT很慢,但是单独运行时INSERT或SELECT很快【英文标题】:INSERTINTOSELECTisveryslow,butINSERTorSELECTarefastwhenrunningseparetely【发布时间】:2021-06-0723:34:17【问题描述】:我有一个这样的SQL:INSERTINTOtable1(column1,column2)(SELECTcolumn3,co... 查看详情

sql怎么分组取行数最大的一条

...lare @Tab table  (Num int, Name varchar(2),   Time DATETIME)  insert into @tab select 1    ,\'a\',        \'2009/05/01\'  insert into @tab select 1    ,\'a\',        \'2009/05/02\'  insert into @tab select 1    ,\'a\',        \'2009/05... 查看详情

调用 OPENROWSET 时 INSERT INTO 和 SELECT INTO 的区别

】调用OPENROWSET时INSERTINTO和SELECTINTO的区别【英文标题】:DifferencebetweenINSERTINTOandSELECTINTOwhencallingOPENROWSET【发布时间】:2016-12-2116:57:41【问题描述】:select1asX,d.*into[TravelData]fromOPENROWSET(\'SQLNCLI\',\'Server=<redacted> 查看详情

Insert into Select 没有正确插入相同的数据顺序

...时间】:2015-07-3010:45:40【问题描述】:我在SQLServer2014中使用了insertinto命令,但没有按照数据的相同顺序插入。它显示的行数相同,但与您在下图中看到的数据顺序不同。插入命令是:insertinto[test].[ 查看详情

MySQL LAST_INSERT_ID() 与 INSERT INTO tablea SELECT FROM tableb

】MySQLLAST_INSERT_ID()与INSERTINTOtableaSELECTFROMtableb【英文标题】:MySQLLAST_INSERT_ID()withINSERTINTOtableaSELECTFROMtableb【发布时间】:2014-04-1017:38:02【问题描述】:是否可以使用target表中的LAST_INSERT_ID更新source表?INSERTINTO`target`SELECT`a`,`b 查看详情

SELECT INSERT INTO [重复]

】SELECTINSERTINTO[重复]【英文标题】:SELECTinsideINSERTINTO[duplicate]【发布时间】:2014-03-2202:58:11【问题描述】:我想做这样的事情:INSERTINTOtemp_table(temp_value)VALUES(SELECTsource_valueFROMthe_tableWHEREcondition_value=some_value)WHEREtemp_condit 查看详情

如何改进 INSERT INTO ... SELECT 锁定行为

】如何改进INSERTINTO...SELECT锁定行为【英文标题】:HowtoimproveINSERTINTO...SELECTlockingbehavior【发布时间】:2011-02-0802:43:08【问题描述】:在我们的生产数据库中,我们每小时运行以下伪代码SQL批处理查询:INSERTINTOTemporaryTable(SELECTFROMHi... 查看详情

使用 INSERT INTO 选择更新

】使用INSERTINTO选择更新【英文标题】:SELECTFORUPDATEwithINSERTINTO【发布时间】:2014-02-1105:29:54【问题描述】:我正在制作某种游戏彩票,我得到了从MyISAM切换到InnoDB并开始使用FORUPDATE的建议,因此彩票(从1到16不等)无法卖出更多... 查看详情