
09/02/2007, 05:04
|
|
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 |