【问题标题】:Reference current row in INSERT INTO statement MySQL在 INSERT INTO 语句 MySQL 中引用当前行
【发布时间】:2011-06-09 22:05:41
【问题描述】:

我正在尝试执行如下 INSERT INTO 语句:

insert into table1 (id, data1, data2) select c.id, c.data1, (select a.id 
from table3 a, table2 b where b.id=c.id and a.data3=b.data3) from table2 c;

基本上这里发生的事情是我将一些数据从一个表迁移到另一个表。但是,在新表中,我想要第三个表中的一行的 id,而不是存储在原始表中的字符串。

我觉得我的查询很接近,但是当我运行它时,mysql 给出了错误:

ERROR 1242 (21000): Subquery returns more than 1 row

我认为问题出在b.id=c.id,但我不明白为什么c.id 不是特定值。如果我用已知的 id 替换 c.id,查询会按预期运行。

更一般地说,我需要能够从我的 select 语句的结果中访问我所在的“当前行”,并在该内部 select 语句中使用它的 id。

如何让我的内部选择语句只引用一行?

这是在 CentOS 上运行的 MySql 5.0.77。

【问题讨论】:

  • 如果没有您的表架构,很难回答...要获得一行,您可以使用 SELECT TOP 1 c.id....,但这可能不是您想要的。

标签: mysql mysql-error-1242


【解决方案1】:

我们无法告诉您为什么您的子查询返回不止一行而没有看到更多的表/数据。做一些调查并找出哪些记录是重复的,您应该能够解决您的问题。

如果您不关心重复项而只想让查询正常工作,请在子查询中使用 LIMIT 0,1

【讨论】:

  • 你是对的。我最初认为是 id 给了我问题,但我很困惑,因为我知道 id 是独一无二的。原来 table3 中有两条记录具有相同的 data3。 LIMIT 0,1 也给了我预期的结果。
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多