Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Una cosulta SQL que no logro. Help

Estas en el tema de Una cosulta SQL que no logro. Help en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/02/2010, 09:46
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Exclamación Una cosulta SQL que no logro. Help

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.
  #2 (permalink)  
Antiguo 23/02/2010, 09:46
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Una cosulta SQL que no logro. Help

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

Código:
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
  #3 (permalink)  
Antiguo 23/02/2010, 10:01
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Una cosulta SQL que no logro. Help

He probado esto y parece que va, pero no estoy seguro. Si es así, era más sencilla de lo esperado

Código:
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')
  #4 (permalink)  
Antiguo 23/02/2010, 15:40
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Una cosulta SQL que no logro. Help

Creo, solo eso, que tienes un error de diseño, espero no equivocarme.

Etiquetas: cosulta, sql
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 19:32.