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

时间:2011-06-09 22:05:41

标签: 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,而不是存储在原始表中的String。

我觉得我的查询很接近,但是当我运行它时,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。

1 个答案:

答案 0 :(得分:1)

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

如果您不关心重复项,并且只是希望查询起作用,请在子查询上使用LIMIT 0,1