Uso de Inner Join. Los objetos en la clausula FROM tienen los mismos nombre

Espero puedas orientarme con este problema. Estoy queriendo hacer esta consulta:
rstPrestamos.Open "SELECT Voluntarios.ApeVol,Voluntarios.NomVol,Prestamos.CodMaterial,Prestamos.Cantidad FROM( VOLUNTARIOS INNER JOIN PRESTAMOS ON VOLUNTARIOS.NumVoluntario = PRESTAMOS.NumVoluntario) INNER JOIN PRESTAMOS ON PRESTAMOS.CodMaterial =STOCKMATERIALES.CodMaterial WHERE PRESTAMOS.NumPrestamo LIKE '" +txtNumeroConstPrestamo.Text + "%'", Base, adOpenStatic, adLockOptimistic

Pero me da el siguiente error:

Los objetos "PRESTAMOS" y "PRESTAMOS" en la clausula FROM tienen los mismos nombres expuestos. Use nombres de correlación para distinguirlos.
¿Puedes decirme que es lo que estoy haciendo mal?

2 Respuestas

Respuesta
1

La solución es que debes poner un alias ya que estás usando los mismos nombres de tablas (PRESTAMOS), el problema será saber los campos que necesitas de la tabla de Prestamos. Es muy buena practica hacerlo...

SELECT
V.ApeVol,V.NomVol,P1.CodMaterial, P2.Cantidad
FROM VOLUNTARIOS V INNER JOIN PRESTAMOS P1 ON V.NumVoluntario =
P1.NumVoluntario) INNER JOIN PRESTAMOS P2 ON P2.CodMaterial
=STOCKMATERIALES.CodMaterial WHERE P1.NumPrestamo LIKE '"
+txtNumeroConstPrestamo.Text + "%'", Base, adOpenStatic,
adLockOptimistic

Aunque me causa mucho ruido tu tabla STOCKMATERIALES porque no la tienes definida en tu clausula FROM

Amigo. Te agradezco la respuesta pero como no es la solución te tengo que puntuar Muy Bien solamente ya que estabas orientado pero, lo del alias no hace falta y sí, el problema era que no tenía la tabla StockMateriales definida en la consulta. Estaba llamando 2 veces a la tabla Prestamos.

Gracias!!!! Saludos.

Respuesta
1

Te sugiero el uso de ALIAS de tablas. Esto quiere decir que en lugar de usar PRESTAMOS. Campo, utilices algo por ejemplo así: pres. Campo.

Aquí esta un ejemplo simple que puedes aplicar a tu consulta:

Select tb1.campo1, tb1.campo2, tb2.campo1, tb2.campo2

from tabla1 tb1

Inner join tabla2 tb2 on tb2.campo1=tb1.campo1

Where tb2.campo2 like '%consulta ejemplo%'

Espero te sirva este ejemplo. Siempre hay que identificar las tablas por un alias y mas cuando las ocupas en diferentes joins. Esto es para poder tener mejor congruencia en cuanto a las relaciones entre ellas mismas.

En caso de que tengas mas dudas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas