Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

INNER JOIN con varias tablas dentro de una misma base

Estas en el tema de INNER JOIN con varias tablas dentro de una misma base en el foro de Visual Basic clásico en Foros del Web. Hola amigos Tengo un problema a la hora de establecer un INNER JOIN que relaciona varias tablas. Explico: Existe una Base Access que tiene dentro ...
  #1 (permalink)  
Antiguo 09/02/2007, 05:04
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Pregunta INNER JOIN con varias tablas dentro de una misma base

Hola amigos

Tengo un problema a la hora de establecer un INNER JOIN que relaciona varias tablas. Explico:

Existe una Base Access que tiene dentro de si tres tablas. Llamemoslas AVISOS, OPERARIOS e INCIDENCIAS. Están todas relacionadas (1 a varios) mediante la integridad referencial de la siguiente manera:

Parte 1 Parte Varios

Tabla OPERARIOS Campo NOM Tabla AVISOS Campo OPE
Tabla INCIDENCIAS Campo NOM Tabla AVISOS Campo INC

Y dentro de las tablas OPERARIOS e INCIDENCIAS existe un campo booleano (S/N) llamado EST.

Bien, pues la consulta que pretendo hacer es que me muestre todos los registros de la Tabla AVISOS, para los cuales se cumpla que el campo EST en las Tablas OPERARIOS e INCIDENCIAS, tenga valor 1.

Si lo fuese a hacer con una sola de las bases sería simple, o sea, por ejemplo.

Tabla AVISOS:
ID OPE INC
1 José Hecho
2 José Nulo
3 Juan Hecho
4 Juan Hecho

Tabla OPERARIOS:
NOM EST
José 1
Juan 0
Pedro 0
Roberto 1

La instrucción SQL que le paso al ADO sería de la siguiente manera:

"select * from AVISOS INNER JOIN OPERARIOS on AVISOS.OPE=OPERARIOS.NOM where OPERARIOS.EST=1"

Y me muestra, en ese ejemplo solo los registros 1 y 2 de la tabla AVISOS, porque son los únicos que cumplen la condición de que el campo EST=1 en la Tabla OPERARIOS.

Pero cuando intento hacerlo con las tres tablas, no lo logro:

Añadimos al ejemplo anterior:
Tabla INCIDENCIAS
NOM EST
Hecho 1
En Espera 0
Nulo 0

El recordset debería mostrar solo el primer registro, que es el que cumple las dos condiciones

Tabla AVISOS:
ID OPE INC
1 José Hecho

Y la cadena que le estoy pasando es la siguiente:

"select * from AVISOS INNER JOIN (INCIDENCIAS on AVISOS.INC=INCIDENCIAS.NOM where INCIDENCIAS.EST=1) OPERARIOS on AVISOS.OPE=OPERARIOS.NOM where OPERARIOS.EST=1"

y obviamente está mal.

Ojalá haya sabido explicarme.

Gracias por su ayuda
  #2 (permalink)  
Antiguo 09/02/2007, 06:39
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 4 meses
Puntos: 13
Re: INNER JOIN con varias tablas dentro de una misma base

Hola

Puede que te resulte de ayuda realizar la consulta utilizando el diseño de consultas del propio access (mas visual) y luego cambiar a vista SQL para ver la sentencia escrita.

Intenta poner la condición where al final uniendo las dos condiciones con un and, en lugar de poner dos where

Te paso la select, espero te sea de utilidad:


Código:
SELECT INCIDENCIAS.EST, *
FROM (AVISOS INNER JOIN OPERARIOS ON AVISOS.OPE = OPERARIOS.NOM) INNER JOIN INCIDENCIAS ON AVISOS.INC = INCIDENCIAS.NOM
WHERE (((OPERARIOS.EST)=Yes) AND ((INCIDENCIAS.EST)=Yes));
--Saludos--

Última edición por Insomnia; 09/02/2007 a las 06:46
  #3 (permalink)  
Antiguo 09/02/2007, 06:56
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Re: INNER JOIN con varias tablas dentro de una misma base

Gracias Insomnia

Funcionó perfectamente.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:50.