Error SQL ORA 01427

Intento actualizar una de las columnas de mi tabla recostackndo los valores de otra tabla en el almacén de datos usando esta consulta

UPDATE tablename PT SET DID = (select distinct(did) from datastore.get_dept_alias where upper(ltrim(rtrim(deptalias))) = upper(ltrim(rtrim(PT."Dept Descr"))) AND cid = PT.CID) 

Nota: Ambos nombres de columna en la tabla son los mismos que se ingresaron

Aparece el error ORA 01427. Alguna idea sobre el problema? Estoy tratando de entender las otras publicaciones de este error de ORA

Como puedes ver aquí

Error de SQL: ORA-01427: subconsulta de una sola fila devuelve más de una fila

Esto significa que su sub-consulta

 select distinct(did) from datastore.get_dept_alias where upper(ltrim(rtrim(deptalias))) = upper(ltrim(rtrim(PT."Dept Descr"))) AND cid = PT.CID) 

está regresando más de una fila.

Entonces, ¿estás seguro de que distinct (did) es único? Parece que no lo es. No recomiendo usar where rownum = 1 porque no sabe cuál de los valores se usará para actualizar; a less que use ORDER BY.

Obtiene este error porque su statement seleccionada puede devolver más de un resultado. No puede actualizar una sola celda con una consulta que potencialmente puede devolver más de un resultado.

Un enfoque común para evitar esto con muchos lenguajes SQL es usar un top 1 o algo así para asegurarle al motor que solo devolverá un resultado. Tenga en count que debe hacer esto incluso si sabe que la consulta solo arrojará un resultado. Solo porque USTED sepa, eso no significa que el motor lo sepa. El motor también tiene que protegerte de las posibilidades futuras, no solo de las cosas, ya que están en este momento.

Actualizar:

Noté que actualizaste tu pregunta a Oracle. Entonces, en ese caso, podría limitar la subconsulta a un único resultado utilizando la where rownum = 1 . Como señaló otra respuesta, tendrías que utilizar una lógica adicional para asegurarte de que la parte superior 1 que vuelve es la correcta. Si no sabes cuál es el correcto, resuelve primero.

También se me ocurre pensar que puede estar entendiendo mal lo que hace DISTINCT . Esto garantiza que los resultados de devolución sean únicos, pero aún podría haber múltiples resultados únicos.