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

Subquery para marginar registros

Estas en el tema de Subquery para marginar registros en el foro de Mysql en Foros del Web. Hola, Resulta que tengo 2 tablas con la misma esctructura, Tabla A Tabla B En la tabla A tengo 100,000 registros. En la tabla B ...
  #1 (permalink)  
Antiguo 22/07/2009, 14:06
Avatar de locojars  
Fecha de Ingreso: mayo-2002
Mensajes: 265
Antigüedad: 21 años, 11 meses
Puntos: 4
De acuerdo Subquery para marginar registros

Hola,

Resulta que tengo 2 tablas con la misma esctructura,
Tabla A
Tabla B

En la tabla A tengo 100,000 registros.
En la tabla B tengo 2,050 registros los cuales estan también en la tabla A.

Lo que necesito hacer es una consulta sobre la tabla A pero que no me seleccione los IDs que estan en la tabla B.

He tratado lo siguiente

Código:
select * from tablaA where ID not in (select ID as id from tablaB)
Pero no me funciona, la consulta se queda "pegada" y no se ejecuta.

Espero alguien pueda ayudarme.

Gracias.
__________________
No le digas a Jehová que tan grande es tu problema, dile a tu problema cuan grande es Jehová.
  #2 (permalink)  
Antiguo 22/07/2009, 14:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Subquery para marginar registros

Como lo tienes es valido, pero creo que tienes un problema de sobrecarga en el servidor por la cantidad de regsitros que estas manejando.

Prueba con esto:
Código sql:
Ver original
  1. SELECT * FROM tablaA WHERE NOT EXISTS (SELECT 1 FROM tablaB WHERE id=tablaA.id)

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 22/07/2009, 14:40
Avatar de locojars  
Fecha de Ingreso: mayo-2002
Mensajes: 265
Antigüedad: 21 años, 11 meses
Puntos: 4
Pregunta Respuesta: Subquery para marginar registros

Hola Huesos,

Gracias por tu respuesta.

Lo probe pero igual se queda "pegado" despues de 3-4 mins. lo ejecuta, pero es demasiado tiempo ya que serán 7 consultas parecidas a estas las que voy a necesitar.


Si creen que exista otra forma de poder realizarlo les agradeceré me lo hagan saber.

Saludos,
__________________
No le digas a Jehová que tan grande es tu problema, dile a tu problema cuan grande es Jehová.
  #4 (permalink)  
Antiguo 22/07/2009, 15:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Subquery para marginar registros

Esta debe ser mas optima.

Código mysql:
Ver original
  1. SELECT tablaA.* FROM tablaA
  2. LEFT JOIN tablaB
  3. tablaA.id = tablaB.id
  4. WHERE tablaB.id is null

Nos cuentas como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 22/07/2009, 16:50
Avatar de locojars  
Fecha de Ingreso: mayo-2002
Mensajes: 265
Antigüedad: 21 años, 11 meses
Puntos: 4
Pregunta Respuesta: Subquery para marginar registros

Hola huesos,


De esta forma tardo mucho más, tiempo de respuesta 5 mins. 45 seg.

Para poder avanzar un poco, en todo esto, lo que hice es mejor hacer la consulta sobre otra tabla más pequena de 15,107(ab) registros, de la forma en que anteriormente me habias dicho

Código:
SELECT * FROM ab WHERE NOT EXISTS (SELECT 1 FROM todos WHERE ID=analisis_ab.ID)
Con esto obtengo los registros de la tabla ab que no se encuentran en la tabla todos. El performace es de 45 segs. lo cual me parece aceptable, pero lo que ahora necesito hacer es borrar los registros en la tabla ab, que se encuentran repetidos(osea que estan en las 2 tablas)

Traté haciendo esto:
Código:
SELECT * FROM ab WHERE NOT EXISTS (SELECT 1 FROM todos WHERE ID<>analisis_ab.ID)
Pero no me devuelte nada. Yo esperaba que esta consulta me devolviera los registros que estan en común en las 2 tablas de esta forma solo cambiar el select por el delete.

Lo que necesito hacer concretamente, es borrar los registros que se encuentran en común en las 2 tablas. Con esto creo que me bastaría por el momento para continuar mis pruebas.

Saludos y Gracias.
__________________
No le digas a Jehová que tan grande es tu problema, dile a tu problema cuan grande es Jehová.
  #6 (permalink)  
Antiguo 23/07/2009, 07:50
Avatar de locojars  
Fecha de Ingreso: mayo-2002
Mensajes: 265
Antigüedad: 21 años, 11 meses
Puntos: 4
De acuerdo Respuesta: Subquery para marginar registros

Me respondo yo mismo....jejjejejeje

Solo le quite el NOT y ya me muestra lo que necesito.

Saludos y Gracias.
__________________
No le digas a Jehová que tan grande es tu problema, dile a tu problema cuan grande es Jehová.
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 10:51.