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

Consulta multiple

Estas en el tema de Consulta multiple en el foro de Oracle en Foros del Web. Forianos estoy tratando de hacer una consulta a 3 tablas, tengo una tabla "TABLA_1" que tiene un ID la cual puede estar en "TABLA_2" ó ...
  #1 (permalink)  
Antiguo 17/03/2011, 09:59
 
Fecha de Ingreso: febrero-2011
Mensajes: 100
Antigüedad: 13 años, 9 meses
Puntos: 0
Consulta multiple

Forianos estoy tratando de hacer una consulta a 3 tablas, tengo una tabla "TABLA_1" que tiene un ID la cual puede estar en "TABLA_2" ó "TABLA_3" y tengo que contar el total de ID de la TABLA_1 que se encuentran en cualquiera de las dos tablas, esto lo hago asi

select count(*)
from tabla_1 a
left outer join tabla_2 b on (a.ID = b.ID2)
left outer join tabla_3 c on (a.ID = c.ID3)
where (a.ID = b.ID2 or a.ID = c.ID3)
and fecha > trunc(sysdate - 30)
order by a.ID desc

Esto me trae 100 datos que es lo correcto son los 100 datos que coinciden dentro del la DB, pero ahora quiero saber los ID de TABLA_1 que no estan dentro de TABLA_2 y TABLA_3

el total de la tabla_1 son 1200, 1200 - 100 son 1100 datos, osea la consulta me tendria que traer 1100 datos, pero no me resulta.. o no sé como hacerlo
  #2 (permalink)  
Antiguo 17/03/2011, 10:04
Avatar de ichigohollow  
Fecha de Ingreso: octubre-2009
Mensajes: 38
Antigüedad: 15 años
Puntos: 1
Respuesta: Consulta multiple

pero necesitas que esa misma consulta te diga las 2 cosas o necesitas queries por separado?
  #3 (permalink)  
Antiguo 17/03/2011, 10:08
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Consulta multiple

Facil. Comprueba que los ID de las tablas 2 y 3 es nulo, así tendrás los registros que tienes en la tabla1 y no están en ninguna de las otras dos.

Código SQL:
Ver original
  1. SELECT COUNT(*)
  2. FROM tabla_1 a
  3. LEFT OUTER JOIN tabla_2 b ON (a.ID = b.ID2)
  4. LEFT OUTER JOIN tabla_3 c ON (a.ID = c.ID3)
  5. WHERE b.ID2 IS NULL AND c.ID3 = NULL
  6. AND fecha > trunc(sysdate - 30)
  7. ORDER BY a.ID DESC
  #4 (permalink)  
Antiguo 17/03/2011, 11:14
 
Fecha de Ingreso: febrero-2011
Mensajes: 100
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta multiple

Es en una consulta aparte, Heimish2000, probare con lo que me acabas de mensionar...
e intentado con not exists y not in pero no me resulta, prueba y te comento, gracias por la respuesta
  #5 (permalink)  
Antiguo 17/03/2011, 11:26
 
Fecha de Ingreso: febrero-2011
Mensajes: 100
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta multiple

Los resultados reales de la consulta son los siguientes:::

Los ID de la tabla_1 que se encuentran en tabla_2 ó tabla_3 = 53

Todos los datos de la tabla_1 = 1241

**Los datos que no se encuentran en tabla_1 y tabla_2 deberina ser = 1188 (1241-53)

Cuando hago la consulta que me referenciastes me da 1196, existen 8 datos que no me muestra antes o que me muestra de mas ahora.. whaaaaa..! csm
  #6 (permalink)  
Antiguo 17/03/2011, 11:30
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Consulta multiple

¿Puede que tengas registros en tabla2 y tabla3 con ID2 e ID3 informado pero no coincida con ninguno en tabla1? Supongo que no y que serán FK de tabla1, pero es lo que se me ocurre. En cualquier caso, para comprobar que existe en tabla2 o tabla3 yo usaria una consulta un poco diferente a la tuya

Código SQL:
Ver original
  1. SELECT COUNT(*)
  2. FROM tabla_1 a
  3. LEFT OUTER JOIN tabla_2 b ON (a.ID = b.ID2)
  4. LEFT OUTER JOIN tabla_3 c ON (a.ID = c.ID3)
  5. WHERE (b.ID2 IS NOT NULL OR c.ID3 IS NOT NULL)
  6. AND fecha > trunc(sysdate - 30)
  7. ORDER BY a.ID DESC
  #7 (permalink)  
Antiguo 17/03/2011, 12:13
 
Fecha de Ingreso: febrero-2011
Mensajes: 100
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta multiple

Tienes razon es mucho mas eficiente con el is not null, vere que datos son lo que no me erroja y te avisare, gracias por las respuestas

Etiquetas: Ninguno
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 08:43.