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

Ayuda arreglar select varias tablas

Estas en el tema de Ayuda arreglar select varias tablas en el foro de SQL Server en Foros del Web. Como estan Tengo un select "por motivos de privacidad no lo puedo colocar aca" que llama datos desde tres tablas algo parecido a esto: select ...
  #1 (permalink)  
Antiguo 08/02/2008, 13:39
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 18 años
Puntos: 50
Ayuda arreglar select varias tablas

Como estan

Tengo un select "por motivos de privacidad no lo puedo colocar aca" que llama datos desde tres tablas algo parecido a esto:

select campos from tabla1, tabla2, tabla3 where campotabla1=campotabla2 etc etc

"es para realziar la busqueda de unos registros dependiendo las ociones seleccionadas en un formulario".

el problem esta en que una de las condiciones del where es

campotabla1=campotabla2

Ejemplo "aclarando que son mas tablas las que participan en el select"

tabla Producto
Codproducto Nombre Categoria
1 yuca 0
2 papa 1
3 arroz 2
4 platano 3

tabla Categoria
cod nombre
1 alimentos
2 aseo
3 hogar

si le digo traigame los productos cuyo codproducto sea = 1

a. Si en la busqueda especifico categoria obviamente no me muestra nada porque no tiene categoria y la condicion campotabla1=campotabla2 no se cumpliria
b, si le quito esa condicion en caso de que en el formulario no se seleccione niguna categoria, me muestra

Nomproducto Nomcategoria
yuca alimentos
yuca aseo
yuca hogar

La idea es que el resultado sea
Nomproducto Nomcategoria
yuca "Aquime quedaria en blanco o despues le podria colocar no tiene categoria asociada o algo asi"



como puedo arreglar la consulta?

Gracias por contestar, espero me haya dado a aentender!
  #2 (permalink)  
Antiguo 08/02/2008, 14:26
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Ayuda arreglar select varias tablas

codificando la descripcion de tu ejemplo y una alternativa de solucion...

Código:
Set nocount On
if object_id('tempdb..#Producto') is not null Drop Table #Producto
if object_id('tempdb..#Categoria') is not null Drop Table #Categoria

create table #Producto(Codproducto int, Nombre varchar(30),  Categoria int)
create table #Categoria(cod int, categoria varchar(30))

Insert into #Producto values (1,'yuca',0)
Insert into #Producto values (2,'papa',1)
Insert into #Producto values (3,'arroz',2)
Insert into #Producto values (4,'platano',3)

Insert into #Categoria values (1,'alimentos')
Insert into #Categoria values (2,'aseo')
Insert into #Categoria values (3,'hogar')



Select P.Nombre, isnull(C.Categoria,'') Categoria
From   #Producto P
Left outer join
       #Categoria C
On     P.Categoria = C.Cod
Where  P.CodProducto = 1
La recomendación es siempre utilizar joins en lugar de dejar las condiciones en el where...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 08/02/2008, 14:55
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 18 años
Puntos: 50
Re: Ayuda arreglar select varias tablas

Gracias por responder pero tengo otra duda

Aparte de esas dos tablas hay otra tabla de la que traigo datos. en que parte del form debo colocarla para que no me dañe la consulta ni me saque error.


Gracias
  #4 (permalink)  
Antiguo 08/02/2008, 15:04
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Ayuda arreglar select varias tablas

Debes definir lo que requieres...

por ejemplo, si es estrictamente necesario que mi registro de productos tenga correspondencia en la otra tabla, seria un inner join.

si no importa que no aparezca en esa otra tabla pero si en productos, seria igual, un left outer join...



Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 08/02/2008, 15:11
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 18 años
Puntos: 50
Re: Ayuda arreglar select varias tablas

Mejor dicho la consulta es esta

Código HTML:
SELECT convert(varchar(15), r.radi_nume_radi) AS RADI_NUME_RADI, r.RADI_FECH_RADI, r.RA_ASUN, r.rut_archivo, td.sgd_tpr_descrip, CONVERT(float, ROUND(convert(float, (r.radi_fech_radi+(td.sgd_tpr_termino * 7/5))-GetDate()),0)) as diasr, r.RADI_NUME_HOJA, r.RADI_PATH, dir.SGD_DIR_DIRECCION, dir.SGD_DIR_MAIL, dir.SGD_DIR_NOMREMDES, dir.SGD_DIR_TELEFONO, dir.SGD_DIR_DIRECCION, dir.SGD_DIR_DOC, r.RADI_USU_ANTE, r.RADI_PAIS, dir.SGD_DIR_NOMBRE, dir.SGD_TRD_CODIGO, r.RADI_DEPE_ACTU, r.RADI_USUA_ACTU, r.CODI_NIVEL,r.SGD_SPUB_CODIGO FROM sgd_dir_drecciones dir, radicado r, sgd_tpr_tpdcumento td WHERE dir.sgd_dir_tipo = 1 AND dir.RADI_NUME_RADI=r.RADI_NUME_RADI AND r.TDOC_CODI=td.SGD_TPR_CODIGO AND (r.radi_fech_radi>=convert(datetime,substring('2008-01-08 12:00:00AM',1,19),102) and r.radi_fech_radi<=convert(datetime,substring('2008-02-08 11:59:59PM',1,19),102) and r.radi_depe_actu=400 and r.radi_nume_radi like '%1482%' ) order by r.radi_fech_radi
el problema que comente esta en esta condicion r.TDOC_CODI=td.SGD_TPR_CODIGO


me puede ayudar a arreglarla o por lo menos orientarme por que lo que hice fue hacer el inner join entre la tablaradicado y y la de documentos pero entonces la de direcciones me queda volando y de esa tambien estoy trayendo datos

Gracias
  #6 (permalink)  
Antiguo 08/02/2008, 15:29
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Ayuda arreglar select varias tablas

ayudaria mucho si la publicaras con los tabs correspondientes...

se lee mas rapido...


------
Edicion: Ya la pude leer, pero no tiene joins como indicas.

si puedes comentar cual es el requerimiento podemos ordenar la consulta, primero que nada supongo que direcciones es la tabla base, es decir, no importa que no tenga correspondencia en las otras tablas, si coincide con tipo = 1, se mostrara el registro, y de ahi se buscara en las otras dos tablas mostrando la informacion respectiva cuando aparezca en cada una de ellas, es correcto??

La duda es si en el resultado final se mostraran solo los registros que coincidan con los filtros de radicado, o esos filtros sirven solo para la busqueda en la tabla y cuando no coincidan las columnas del resultado para esa tabla se mostraran en blanco...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 08/02/2008 a las 15:45 Razón: Pregunta
  #7 (permalink)  
Antiguo 08/02/2008, 15:43
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 18 años
Puntos: 50
Re: Ayuda arreglar select varias tablas

SELECT convert(varchar(15), r.radi_nume_radi) AS RADI_NUME_RADI, r.RADI_FECH_RADI, r.RA_ASUN, r.rut_archivo, td.sgd_tpr_descrip, CONVERT(float, ROUND(convert(float, (r.radi_fech_radi+(td.sgd_tpr_termino * 7/5))-GetDate()),0)) as diasr, r.RADI_NUME_HOJA, r.RADI_PATH, dir.SGD_DIR_DIRECCION, dir.SGD_DIR_MAIL, dir.SGD_DIR_NOMREMDES, dir.SGD_DIR_TELEFONO, dir.SGD_DIR_DIRECCION, dir.SGD_DIR_DOC, r.RADI_USU_ANTE, r.RADI_PAIS, dir.SGD_DIR_NOMBRE, dir.SGD_TRD_CODIGO, r.RADI_DEPE_ACTU, r.RADI_USUA_ACTU, r.CODI_NIVEL,r.SGD_SPUB_CODIGO FROM sgd_dir_drecciones dir, radicado r, sgd_tpr_tpdcumento td WHERE dir.sgd_dir_tipo = 1 AND dir.RADI_NUME_RADI=r.RADI_NUME_RADI AND r.TDOC_CODI=td.SGD_TPR_CODIGO AND (r.radi_fech_radi>=convert(datetime,substring('200 8-01-08 12:00:00AM',1,19),102) and r.radi_fech_radi<=convert(datetime,substring('2008-02-08 11:59:59PM',1,19),102) and r.radi_depe_actu=400 and r.radi_nume_radi like '%1482%' ) order by r.radi_fech_radi


esa es la consulta
  #8 (permalink)  
Antiguo 12/02/2008, 15:09
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Ayuda arreglar select varias tablas

Cita:
...FROM sgd_dir_drecciones dir, radicado r, sgd_tpr_tpdcumento td WHERE...
Usar tablas separadas por comas se considera una mala práctica en SQL Server.

Mejor utilizar los JOINs que ya te han mostrado. Mejoran la legibilidad bastante.

...Además de lo que te comentaron de indentar las consultas al publicarlas en los foros, es más fácil que leer los corridos incesantes de letras (revisa los tags de [ code ] y [ /code ]).
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
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 09:33.