Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/06/2010, 15:55
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problemas con una select, es urgente!!! para este lunes como muy tarde por

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 original
  1. SELECT rol.desrol
  2. FROM rol, asignarrolfun, funcionalidad
  3. WHERE   rol.codrol = asignarrolfun.codrol  AND asignarrolfun.codfun = funcionalidad.codfun
  4.   IN (SELECT funcionalidad.codfun FROM funcionalidad WHERE desfun = 'algo');

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:
Código MySQL:
Ver original
  1.     R.desrol
  2.     rol R INNER JOIN asignarrolfun A ON R.codrol = A.codrol  
  3.     INNER JOIN funcionalidad F ON A.codfun = F.codfun
  4.     F.codfun IN (SELECT funcionalidad.codfun FROM funcionalidad WHERE desfun = 'algo');
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:
Código MySQL:
Ver original
  1.     R.desrol
  2.     rol R INNER JOIN asignarrolfun A ON R.codrol = A.codrol  
  3.     INNER JOIN funcionalidad F ON A.codfun = F.codfun
  4.     F.codfun= 'algo';
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)