Una consulta complicada

Javichechu
23 de Febrero del 2010
Hola amigos. Necesito hacer una consulta a mi base de datos y no soy capaz.

Tengo la siguiente estructura de tablas

http://img689.imageshack.us/img689/3516/tablas.jpg

La tabla peticiones_cuotas tiene el campo DPTO, que es el código de departamento. En la tabla OU_Usuarios, guarda 13 campos (OUx) para guardar cada uno de los departamentos que tiene un usuario. ES decir, en el campo DPTO va un código de departamento que estará en alguno de los campos OUx de la tabla OU_Usuarios.
El caso es que quiero hacer una búsqueda en la tabla Peticiones_Cuota, filtrando por un departamento, pero que ese departamento no solo lo busque en el campo DPTO, sino que esté en cualquiera de los campos OUx de la tabla OU_Usuarios. Hay que relacionar ambas tablas, y por más que he intentado hacer distintas combinaciones, no doy con la solución. A ver si me podéis ayudar. No se si me he explicado bien sobre mi problema.

Javichechu
23 de Febrero del 2010


He intentado una consulta del siguiente modo, es decir, creando tantas relaciones contra tablas virtuales como campos OUx hay. Y a pesar de que me sale un número de registros coherente (3 o cuatro, que es lo qeu debería) sus datos están todos a null

SELECT PETICIONES_CUOTAS.*
FROM PETICIONES_CUOTAS LEFT OUTER JOIN
OU_USUARIOS ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS.OU1 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_1 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_1.OU2 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_3 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_3.OU4 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_4 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_4.OU5 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_5 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_5.OU6 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_6 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_6.OU7 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_7 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_7.OU8 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_8 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_8.OU9 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_9 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_9.OU10 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_10 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_10.OU11 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_11 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_11.OU12 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_12 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_12.OU13 RIGHT OUTER JOIN
OU_USUARIOS AS OU_USUARIOS_2 ON PETICIONES_CUOTAS.DPTO = OU_USUARIOS_2.OU3
WHERE (OU_USUARIOS.OU1 = '00008125') OR
(OU_USUARIOS_1.OU2 = '00008125') OR
(OU_USUARIOS_2.OU3 = '00008125') OR
(OU_USUARIOS_3.OU4 = '00008125') OR
(OU_USUARIOS_4.OU5 = '00008125') OR
(OU_USUARIOS_5.OU6 = '00008125') OR
(OU_USUARIOS_6.OU7 = '00008125') OR
(OU_USUARIOS_7.OU8 = '00008125') OR
(OU_USUARIOS_8.OU9 = '00008125') OR
(OU_USUARIOS_9.OU10 = '00008125') OR
(OU_USUARIOS_10.OU11 = '00008125') OR
(OU_USUARIOS_11.OU12 = '00008125') OR
(OU_USUARIOS_12.OU13 = '00008125')


El parámetro 00008125 es un código de departamento que estoy usando para hacer la prueba. Me salen tres registros, pero ya digo, todos sus datos a null

javichechu
23 de Febrero del 2010
He probado esto y parece que funciona. Pero no estyo seguro que sea lo correcto


SELECT *
FROM PETICIONES_CUOTAS INNER JOIN
OU_USUARIOS ON PETICIONES_CUOTAS.ID = OU_USUARIOS.ID_PETICION
WHERE (OU_USUARIOS.OU3 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU4 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU5 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU6 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU7 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU8 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU9 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU10 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU11 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU12 = \\\\'00008125\\\\') OR
(OU_USUARIOS.OU13 = \\\\'00008125\\\\')