El uso de sentencias join y subconsultas !

Cuando ejecuto esta instrucción me da un error y me dice "Error de sintaxis ... Falta operador" ... Esta instrucción la ejecuto desde visual basic 2005 contra una base de datos en access 2000, pensé que podían estar mal escritos los nombres de algunos campos pero todo está perfecto ... Es simplemente un error de sitaxis y no lo encuentro.
Te agradecería que me dieras una mano y me orientaras al respecto de cómo hacer referencia en este escenario a las sentencias "join" y a las subconsultas.
      ("select g.numero_pago,g.registro,a.nombre,c.nom_curso," & _
        "c.nivel,p.nombre,g.saldoenmora " & _
        "from pagos as g" & _
        " left join registro as r on g.registro = r.numero_registro" & _
        " left join alumnos as a on r.codigo = a.codigo" & _
        " left join cursos as c on r.cod_curso = c.codigo" & _
        " left join profesores as p on r.cod_profesor = p.codigo" & _
        "where g.registro exists(select registro,max(numero_pago) " & _
                                "from pagos " & _
                                "group by registro)")

1 Respuesta

Respuesta
1
poniendolo en blanco y negro tu codigo encontre un error
select g.numero_pago,g.registro,a.nombre,c.nom_curso, c.nivel,p.nombre,g.saldoenmora from pagos as g
left join registro as r on g.registro = r.numero_registro
left join alumnos as a on r.codigo = a.codigo
left join cursos as c on r.cod_curso = c.codigo
left join profesores as p on r.cod_profesor = p.codigo
where g.registro exists(select registro,max(numero_pago) from pagos group by registro)
Si te fijas en la ultima linea, me parece que deberia ser
where exists(select registro,max(numero_pago) from pagos group by registro)
Pues ese dato "g.registro" no le haces ninguna validación.
Pruebas y me avisas...
Gracias por tomarte el tiempo para contestarme, pero no entiendo muy bien a que te refierres cuando me dices que no le hago "ninguna validación" ... podrías explicármelo un poquito más claro ... lo que pasa que apenas empiezo en esto y mucho no entiendo.
Gracias.
Cuando se presenta una subconsulta con la palabra clave EXISTS, funciona como una prueba de existencia. La cláusula WHERE de la consulta externa comprueba la existencia de las filas devueltas por la subconsulta. La subconsulta en realidad no produce ningún dato, devuelve el valor TRUE o FALSE.
Una subconsulta presentada con EXISTS tiene la siguiente sintaxis:
WHERE [NOT] EXISTS (subquery)
En esta consulta se busca el nombre de todos los editores que publican libros de empresa.
USE pubs
SELECT pub_name
FROM publishers
WHERE EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type = 'business')
ESOS DATOS LOS SACO DEL HELP DEL SQL 2000, COMPARA LAS ULTIMA LINEA DE ESE QUERY CON TU ULTIMA LINEA
WHERE EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type = 'business')
 where g.registro exists(select registro,max(numero_pago) from pagos group by registro)
FIJATE QUE LA SINTAXIS DICE QUE EL EXISTS SE USA PARA RECIBIR TRUE O FALSE, no entiendo que hace alli "G.REGISTRO" si quitas eso quedaria
where  exists(select registro,max(numero_pago) from pagos group by registro)  que me parece si es correcto.
De verdad te agradezco tu ayuda y tienes razón, pero después de hacer lo que me dices me sigue dando el mismo error, ¿o es que access no soporta este tipo de consultas?
Te recomendaría que hagas una consulta en el access y del query que te genere dicha consultas.. recién generes tu select del .net. Puesto que habría que ver alguna integridad que pudiese haber en dichas tablas y a primera vista no habría error.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas