Ver Mensaje Individual
  #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