Este mensaje de error traducido significa: “hay muchas filas en el SELECT y debería haber solamente una”

Y ocurre cuando el Firebird está esperando que un SELECT devuelva una y solamente una fila pero el SELECT está devolviendo más de una fila.

Ejemplo:

UPDATE
   MiTabla
SET
   MiColumna = (SELECT MiOtraColumna FROM MiOtraTabla WHERE MiCondición)

¿Cuál es la solución?

El problema está en el SELECT entonces es allí donde se debe solucionar. Lo más sencillo es ejecutar solamente ese SELECT, ver cual es el conjunto resultado que devuelve y modificar el SELECT para que solamente devuelva una fila.

Para que un SELECT devuelva una fila y solamente una fila tenemos varias alternativas:

  1. Cambiar la condición MiCondición
  2. Usar FIRST 1
  3. Usar ROWS 1
  4. Usar DISTINCT

Conclusión:

El error ocurre cuando un SELECT devuelve más de una fila y debería devolver solamente una fila. La solución es revisar el SELECT para comprobar que es lo que devuelve y luego modificarlo para que devuelva solamente una fila.

Artículo relacionado:

El índice del blog Firebird21