2011-06-09 27 views
0

我试图INTO语句像下面的执行INSERT:参考当前行INSERT INTO语句中的MySQL

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。

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

这是在CentOS上运行的MySql 5.0.77。

+0

困难没有你的表架构来回答......得到的只是一排,你可以用'SELECT TOP 1 c.id ....'但这可能不是你正在寻找的东西。 – Lobo 2011-06-09 22:09:41

回答

1

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

如果你不关心重复,你只是想查询工作,在你的子查询使用LIMIT 0,1

+0

你说得对。我原本以为这是给我的问题的编号,但是因为我知道编号是独一无二的,所以感到困惑。原来,table3中有两条记录具有相同的数据3。 LIMIT 0,1也给了我预期的结果。 – twilbrand 2011-06-10 13:39:30