Esta sería la sentencia que estás usando, una vez eliminada toda la "basura" que agrega el código de programación, el cual no debe ponerse en este foro (normas del foro), entre otras cosas porque hace invisible los errores de sintaxis y lo que las variables agregan...:
Código MySQL:
Ver originalFROM rol
, asignarrolfun
, funcionalidad
WHERE rol.codrol
= asignarrolfun.codrol
AND asignarrolfun.codfun
= funcionalidad.codfun
Hay al menos un problema de sintaxis: la subconsulta no tiene ningún dato con la cual está siendo comparada, es decir, IN(sunconsulta) necesita una columna contra qué compararla, cosa que no estás haciendo. No puede ser el
funcionalidad.codfun escrito, porque eso pertenece al par
asignarrolfun.codfun = funcionalidad.codfun.
Otro problema, pero de optimización, es que todos los pares comparativos que muestran la relación entre tablas deben ir en el from con su correspondiente JOIN y no en el WHERE...
La cosa sería, entonces:
Otra observación que surge es que es IN es absolutamente innecesario, porque el objetivo es buscar un dato en una tabla
que ya estás invocando en la consulta principal, y por tanto ya accedes...
Lo más correcto sería, entonces: