2012-03-30 6 views
1

Ich habe eine korrelierte Unterabfrage in einem Update, das früher gut funktionierte (letztes Jahr hat es funktioniert; in diesem Jahr habe ich ein paar kleine Änderungen am Schema vorgenommen und die Daten sind anders). Jetzt schlägt es mit Fehler "Unterabfrage gibt mehr als 1 Zeile fehl".Wann gibt LIMIT 1 mehr als eine Zeile zurück?

Die Abfrage ist dies:

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 
    ) 

Seltsam, nicht wahr?

Um zu finden, wo es mehr als eine Zeile zurückgibt - was unmöglich sein sollte, bereitete ich die Abfrage mit dem Zusatz von "where ap.ID =?" und führte die Abfrage in einer Schleife für jeden gültigen ID-Wert aus. Rate mal was - es hat den ganzen Weg geklappt.

Irgendwelche Ideen, was hier vor sich geht?

+0

Was ist der Fehler, wenn die Unterabfrage keine Ergebnisse zurückgibt? Könnte es nur eine schlechte Fehlermeldung sein? – knabar

+1

Welche Version von MySQL? [Dieser Fehler] (http://bugs.mysql.com/bug.php?id=20519) klingt relevant, wurde aber in 5.0.25 behoben. – ruakh

+0

@knabar - dann hätte ich diesen Fall gesehen, wenn ich es ID zu einer Zeit getan habe. Es wurde erfolgreich abgeschlossen. Danke für die Idee. –

Antwort

Verwandte Themen