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?
Was ist der Fehler, wenn die Unterabfrage keine Ergebnisse zurückgibt? Könnte es nur eine schlechte Fehlermeldung sein? – knabar
Welche Version von MySQL? [Dieser Fehler] (http://bugs.mysql.com/bug.php?id=20519) klingt relevant, wurde aber in 5.0.25 behoben. – ruakh
@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. –