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

SQL y busqueda detallada

Estas en el tema de SQL y busqueda detallada en el foro de SQL Server en Foros del Web. Hola que tal? estoy desarrollando una aplicación de escritorio en donde tengo que hacer una busqueda detallada. cada detalle es un campo de la base ...
  #1 (permalink)  
Antiguo 25/02/2008, 23:10
Avatar de pedraxito  
Fecha de Ingreso: noviembre-2007
Ubicación: Reynosa, Tamaulipas, Mexico
Mensajes: 32
Antigüedad: 16 años, 6 meses
Puntos: 1
Exclamación SQL y busqueda detallada

Hola que tal? estoy desarrollando una aplicación de escritorio en donde tengo que hacer una busqueda detallada.

cada detalle es un campo de la base de datos, y en total serian 4 detalles los que tengo que filtrar .... pero debido a que no tengo mucha experiencia estoy trabado y por lo tanto escribo aqui para pedirles de su ayuda.

Llevo escrito este script de SQL pero todavia no lo logro que me funcione bien

Código:
SELECT        No_Exp, Nombre, Fecha_alta, Sexo, Procedencia, Nombre_Padre, Ocupacion_Padre, Edad_Padre, Nombre_Madre, Ocupacion_Madre, Edad_Madre, 
                         Informante, Direccion, Ciudad, Estado, Pais, zona, Telefono_1, Telefono_2, Foto
FROM            Pacientes
WHERE        (Nombre LIKE @NOMBRE) OR
                         (Nombre_Padre LIKE @PATERNO) OR
                         (Nombre LIKE @NOMBRE) AND (Nombre_Padre LIKE @PATERNO)
  #2 (permalink)  
Antiguo 26/02/2008, 08:15
Avatar de Rinnegan  
Fecha de Ingreso: febrero-2008
Mensajes: 11
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: SQL y busqueda detallada

Bueno primero que nada, seria bueno saber las tablas que estas ocupando para extraer todos estos datos y que se transformen en tu información.

dudo q tengas una tabla tan grande con todos estos datos.

1) En el FROM tienes que poner todas las tablas de donde estas extrayendo los datos, si las tablas no estan ligadas directamente tambien tendras que poner las tablas intermedias que ligan las 2 tablas que te importan.

2) Me di cuenta de que como son muchos datos y posiblemente esten esparcidos por varias tablas, vas a necesitar JOINs, osino se te producira un Producto cartesiano.
EJ: Si tienes una tabla con 14 registros y otra con 10
El resultado sera de 140 registros.

Hay 2 formas para hacer los JOINs
una forma que es la mas sencilla y facil de entender al momento de leer una consulta de otra persona es:

WHERE tabla1.clave_primaria = tabla2.clave_primaria

*Es importante referenciar a las tablas de donde proviene el dato

En el FROM si pones tabla1 tb1, tabla2 tb2
El Where te quedara asi

WHERE tb1.clave_primaria = tb2.clave_primaria AND .....

*Tambien puede ser clave primaria Igualada con la foranea de la otra tabla, lo importante es que tienes que referenciar al mismo campo, tiene que producirse la equivalencia y tienes que lograr unir todas las tablas.

La otra es ocupando la sentencia JOIN en el FROM, despues de declarar las tablas......Aqui vas a encontrar INNER JOIN, LEFT JOIN, RIGHT JOIN, etc.
Es mejor que los busques por separado, estos son un poco mas dificiles de implementar, pero en ocasiones son la unica forma de realizar tu busqueda y la primera solucion que te di no funcionara.

Pero en este caso tuyo si.

3) Despues de todo esto estas listo para realizar las condiciones reales de los registros que quieres que efecticamente se muestren en pantalla.

te recomiendo que los anotes asi:

tb1.clave_primaria = tb2.clave_foranea
AND (Nombre LIKE @NOMBRE)
OR (Nombre_Padre LIKE @PATERNO)
OR ( (Nombre LIKE @NOMBRE) AND (Nombre_Padre LIKE @PATERNO) )

Ojo que le agregue unos parentesis al AND final para que no se mezcle con los demas.

Si te complica mucho la explicacion mandame las tablas con todos sus datos y te hago la QUERY, ya se lo que quieres obtener, no tendre ningun problema.

Bye, ojala te resulte bien.
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 13:35.