Hola Angel, no sé si he entendido bien lo que quieres.
Lo que entiendo es que quieres todas las filas de un paciente determinado que no tenga ninguna clave 2, 4 ni 7.
Es decir entiendo que si en la tabla hay alguna fila de ese paciente con una de esas claves el paciente no debería salir.
Código:
select * from pals_claves
where a_paciente=1642 and a_pals_claves in (91, 92)
and not a_pals_claves in (select a_pals_claves from pals_claves where a_pals_claves in (2,4,7))
creo que el fallo está en el "and not". lo que debes seleccionar es el paciente, no la clave. Porque si pones la clave es como usar el operador "=" en la práctica. Yo el query lo pondría así:
Código:
select * from pals_claves
where a_paciente=1642 and a_pals_claves in (91, 92)
and not a_PACIENTE in (select a_PACIENTE from pals_claves where a_pals_claves in (2,4,7))
En ese caso creo que no devolvería ninguna fila.
No sé si es por donde quieres ir, comentalo. Un saludo,
F.T.G.