mysql - 在 INSERT INTO 语句 MySQL 中引用当前行

标签 mysql mysql-error-1242

我正在尝试执行如下所示的 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 不是一个特定值。如果我将 c.id 替换为已知的 id,查询将按预期运行。

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

如何使我的内部 select 语句仅引用一行?

这是在 CentOS 上运行的 MySql 5.0.77。

最佳答案

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

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

关于mysql - 在 INSERT INTO 语句 MySQL 中引用当前行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299887/

相关文章:

mysql - 优化mysql慢查询

php - Mysql 查询 : error that says subquery returns more than 1 row

MySQL 错误 : #1242 - Subquery returns more than 1 row

mySQL,需要帮助将许多子查询转换为 1 个 SELECT 查询(显示 13 列)

mysql - 如何获取不同行上日期之间的记录?

mysql - TravisCI - 是否可以启动 docker 服务并期望 mysql 正常工作?

mysql - 无法更改 mysql 中的 auto_increment_increment 值

php - 使用 PHP 为每个日期/时间添加分钟

mysql - 在 MySQL 中的子查询上使用 GROUP_CONCAT

mysql - zend 适配器类的 fetchall 函数不起作用