Recibo el error en la siguiente consulta:

SELECT DISTINCT UNIQUE_ID as uid, CONFIDENCE_IS_SAME FROM ( (SELECT UNIQUE_ID, CONFIDENCE_IS_SAME, FIRST_NAME, LAST_NAME, POSTAL_CODE FROM DANIEL.UNIQUE_PHYSICIAN WHERE DANIEL.UNIQUE_PHYSICIAN.FIRST_NAME = "" AND DANIEL.UNIQUE_PHYSICIAN.LAST_NAME = "" AND DANIEL.UNIQUE_PHYSICIAN.IS_ROOT_PHYS = 0 AND DANIEL.UNIQUE_PHYSICIAN.POSTAL_CODE = "") INNER JOIN (SELECT MAX(CONFIDENCE_IS_SAME) OVER (PARTITION BY ROOT_ID) max_conf FROM DANIEL.UNIQUE_PHYSICIAN WHERE DANIEL.UNIQUE_PHYSICIAN.FIRST_NAME = "" AND DANIEL.UNIQUE_PHYSICIAN.LAST_NAME = "" AND DANIEL.UNIQUE_PHYSICIAN.IS_ROOT_PHYS = 0 AND DANIEL.UNIQUE_PHYSICIAN.POSTAL_CODE = "") ON CONFIDENCE_IS_SAME = max_conf); 

Respuesta

Necesita un alias para ambas tablas derivadas. Y el par externo alrededor de es inútil.

SELECT DISTINCT t1.unique_id AS uid, t1.confidence_is_same FROM ( --<< only one opening parenthesis SELECT unique_id, confidence_is_same, first_name, last_name, postal_code FROM daniel.unique_physician WHERE daniel.unique_physician.first_name = "" AND daniel.unique_physician.last_name = "" AND daniel.unique_physician.is_root_phys = 0 AND daniel.unique_physician.postal_code = "" ) t1 ---<< the alias for the derived table is missing INNER JOIN ( SELECT max(confidence_is_same) OVER (PARTITION BY root_id) max_conf FROM daniel.unique_physician WHERE daniel.unique_physician.first_name = "" AND daniel.unique_physician.last_name = "" AND daniel.unique_physician.is_root_phys = 0 AND daniel.unique_physician.postal_code = "" ) t2 ON t1.confidence_is_same = t2.max_conf 

Pero la unión no es necesaria en primer lugar. Su consulta se puede simplificar a:

SELECT DISTINCT t1.unique_id AS uid, t1.confidence_is_same FROM ( SELECT unique_id, confidence_is_same, max(confidence_is_same) OVER (PARTITION BY root_id) max_conf FROM daniel.unique_physician unq WHERE unq.first_name = "" AND unq.last_name = "" AND unq.is_root_phys = 0 AND unq.postal_code = "" ) t1 where confidence_is_same = max_conf; 

No es necesario que seleccione first_name, last_name y postal_code en la selección interna ya que no los usa en la selección externa. Esto puede hacer que la consulta sea potencialmente más eficiente.

Además, la condición unq.last_name = "" no hará lo que usted cree que hace. Oracle no tiene una «cadena vacía «. Una cadena con longitud cero ("") se almacenará como NULL, por lo que lo que realmente desea es probablemente:

SELECT DISTINCT t1.unique_id AS uid, t1.confidence_is_same FROM ( SELECT unique_id, confidence_is_same, max(confidence_is_same) OVER (PARTITION BY root_id) max_conf FROM daniel.unique_physician unq WHERE unq.first_name is null AND unq.last_name is null AND unq.is_root_phys = 0 AND unq.postal_code is null ) t1 where confidence_is_same = max_conf; 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *