2012-03-30 51 views
1

我有一个更新的相关子查询,以前工作得很好(去年它的工作;今年,我对模式做了一些小的改变,数据不同)。现在它失败,“子查询返回多于一行”错误。LIMIT 1何时返回多行?

查询是这样的:

update mytable as q 
set p_ID = (
    select ap.pID 
    from aptable as ap 
    where ap.ID = q.ID 
     and ap.txnDate is not NULL 
     order by ap.txnDate 
     limit 1 offset 2 
    ) 

奇怪,不是吗?

要找到它返回多于一行的位置 - 这应该是不可能的,我准备了查询并添加了“where ap.ID =?”并为每个有效的ID值在循环中运行查询。猜猜看 - 它一直工作。

有什么想法发生了什么?

+0

如果子查询不返回任何结果,错误是什么?它可能只是一个错误的错误信息? – knabar 2012-03-30 13:54:30

+1

哪个版本的MySQL? [此错误](http://bugs.mysql.com/bug.php?id=20519)听起来有关,但在5.0.25中修复。 – ruakh 2012-03-30 13:58:28

+0

@knabar - 那么我会一次看到这种情况,当我做了一个ID。它成功完成。不过谢谢你的想法。 – 2012-03-30 13:59:19

回答