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

Select oracle

Estas en el tema de Select oracle en el foro de Oracle en Foros del Web. Hola amigos de foros del web, tengo una duda acerca de un select que estoy realizando en ORACLE, y me gustaría saber si alguno de ...
  #1 (permalink)  
Antiguo 07/03/2014, 10:20
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 14 años, 6 meses
Puntos: 0
Pregunta Select oracle

Hola amigos de foros del web, tengo una duda acerca de un select que estoy realizando en ORACLE, y me gustaría saber si alguno de ustedes puede darme una idea de como realizarlo, a continuación lo describo.

Tengo 2 tablas una con nombres de calles correctos, y otra tabla la cual pasa por algunos proceso de limpieza para eliminar información no deseada, si realizo la siguiente consulta:

Código SQL:
Ver original
  1. SELECT direccion FROM tabla_2 WHERE procesado='SI';

me regresa alrededor de 2000 datos.

Al ejecutar lo siguiente:
Código SQL:
Ver original
  1. SELECT CAMPO1,DIR,CAMPO3 FROM TABLA_1
  2. WHERE DIR IN (SELECT direccion FROM TABLA_2 WHERE PROCESADO='SI');

Dicha consulta me regresa alrededor de 8000 datos, lo que veo es que si ejecuto:

Código SQL:
Ver original
  1. SELECT CAMPO1,DIR,CAMPO3 FROM TABLA_1 WHERE DIR='PRIMAVERA';

Obviamente me regresa todos los campos que contienen el dato PRIMAVERA, entonces concluyo que me esta devolviendo más datos por que encuentra muchas conicidencias, aquí la duda es ¿Cómo manejar ese SELECT para que solo me regrese los 2000 datos? intente haciendo un DISTINCT en la consulta principal pero no me funcionó, ojalá me haya explicado y alguno de ustedes pueda ayudarme con dicha consulta.

Última edición por gnzsoloyo; 07/03/2014 a las 10:35 Razón: Pésimamente etiquetado. Usar Highlight "SQL", por favor.
  #2 (permalink)  
Antiguo 07/03/2014, 10:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Select oracle

Posiblemente:
Código SQL:
Ver original
  1. SELECT T1.CAMPO1, T1.DIR, T1.CAMPO3
  2. FROM TABLA_1 T1, TABLA2 T2
  3. WHERE T1.DIR = T2.direccion
  4.     AND T1.DIR  = 'PRIMAVERA'
  5.     AND T2.PROCESADO='SI';
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 07/03/2014, 10:46
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Select oracle

Muchas gracias por la respuesta rápida, te comento que usando tu propuesta de solución, me sigue mostrando más registros, de cualquier modo seguiré buscando una solución a esto, y si alguien más aporta algo, todas las ideas son bienvenidas, GRACIAS gnzsoloyo
  #4 (permalink)  
Antiguo 07/03/2014, 11:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Select oracle

Vamos por partes, como decía Jack, the Ripper.

Lo que tienes que determinar primero es cuál es la cardinalidad de la relación entre Tabla_1 y Tabla_2. De lo contrario no podrás resolver tu problema.
Si la relación es 1:1, debería devolver la cantidad de registros igual a la de la consulta que menos devuelve (los 2.000 que mencionas). Eso desde el vamos.
Si devuelve más, no existe un error en la consulta en si, sino que eso indica que hay una relación por lo menos de cardinalidad 1:N, caso en el que siempre te devolverá más registros que la consulta de menor resultado. Es forzoso que eso suceda y es correcto.
Tu error es que no estás restringiendo adecuadamente la query que te devuelve los 8.000 registros. Para que te funcione debes reducir ese resultado y eso únicamente puede hacerse si le agregas a esa tabla condiciones adicionales en el WHERE.
¿Se entiende?
(Repasar los JOIN en caso de no comprenderlo).

Vale decir, la condición
Código SQL:
Ver original
  1. WHERE PROCESADO='SI'
es insuficiente para restringir el resultado. Debes, obligatoriamente, agregar más condiciones para excluir aquellos registros que no corresponden al resultado que buscas.

No puedo decirte mucho más, porque la descripción genérica de tus "tablas" no ayuda a saber con qué modelo de datos estás trabajando.

En resumen: No es un problema de query. Es un problema de parametrizacion del WHERE.

¿Queda clara la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 07/03/2014, 15:18
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Select oracle

Explico un poco la estructura:

Tabla_1 (datos correctos)
*cv
*tipo
*nombre

Tabla_2
*rpu
*direccion
*procesado

la TABLA_1 puede tener nombres iguales pero se identifica por el tipo, por ejemplo:

Nombre = PRIMAVERA puede ser de tipo calle, avenida, callejon

si yo ejecuto por ejemplo:

SELECT CV,NOMBRE FROM TABLA_1 WHERE NOMBRE = 'PRIMAVERA';

Me regresa

Tipo Nombre
CALLE PRIMAVERA
AVENIDA PRIMAVERA
CALLEJON PRIMAVERA
CALLE CALLE A
AVENIDA CALLE B
CALLEJON CALLE B

Al ejecutar:

SELECT DIRECCION FROM TABLA_2 WHERE PROCESADO='SI';

Direccion
PRIMAVERA
CALLE A
CALLE B

Lo que estoy buscando, es la forma de obtener el nombre (sin importar el tipo), solo una vez usando por ejemplo lo siguiente:

SELECT CV,NOMBRE FROM TABLA_1 WHERE NOMBRE IN (SELECT DIRECCION FROM TABLA_2 WHERE PROCESADO='SI');

Busco que el resultado sea:

CV Nombre
123456 PRIMAVERA
654321 CALLE A
987456 CALLE B

Es básicamente lo que busco, la estructura de las tablas quizá no es la más correcta, más sin embargo, yo no diseñé dicho modelo de base de datos, ojalá esto haya quedado un poco más claro, y de nuevo gracias por tu ayuda gnzsoloyo y cualquier comentario quedo a disposición, saludos!
  #6 (permalink)  
Antiguo 07/03/2014, 15:19
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Select oracle

Disculpa el formato, pero al enviar la respuesta ese fue su acomodo, saludos!

Etiquetas: consulta+sql, select
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:29.