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

Mejorar consulta de bases diferentes

Estas en el tema de Mejorar consulta de bases diferentes en el foro de SQL Server en Foros del Web. Hola buen dia!!! e Disculpen este tema lo puse por otro lado como respuesta ya que no sabia como hacer mi propio tema pero ya ...
  #1 (permalink)  
Antiguo 20/10/2010, 09:51
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Mejorar consulta de bases diferentes

Hola buen dia!!! e

Disculpen este tema lo puse por otro lado como respuesta ya que no sabia como hacer mi propio tema pero ya se asi que aqui les dejo mi pregunta ojala me puedan ayudar

tengo dos bases de datos en sql server 2008, en una base tengo 2 tablas que contienen miles de datos, y en la segunda base tengo una tabla, esa tabla se llenara con algunos campos de las dos tablas de la otra base. bueno para hacer esto ago un select para no repetir los datos, mi problema es que si le ago un select a la tabla 1 tiene 400000 datos y le ago un select a las dos tablas de la misma base uniendolas por un campo que tienen en comun (ojo no son llave primaria ni foranea, solo campos que tiene la misma informacion) y me devuelve datos de mas 1457000 quisiera ver si alguien me puede ayudar para que me regrese solo los datos que realmente existen, cabe mencionar que ninguna de las tablas tiene llave primaria. dejo mi consulta haber si alguien me puede ayudar de antemano gracias.

select null, ac.CLVE_CAT, CLSE_PRE,
ac.SUP_T, ac.SUP_C, ac.VLR_T, ac.VLR_C, ac.CNS_AD, ac.BSS_GRVBLS, ac.FCHA_AVL,
um.Tpo_Mvmiento, um.Fcha_Mvmiento, ac.NMBRE_P, ac.DMCLIO_L, ac.MOV_HCHO, null, null, null, null, null,
null from BD_PADRON_CATASTRAL..Altas_Catastro as ac inner join BD_PADRON_CATASTRAL..Usuarios_Movimientos as um on
ac.CLVE_CAT = um.Cuenta_Prdial


los campos null son solo para rellenar la tabla destino.
  #2 (permalink)  
Antiguo 20/10/2010, 11:04
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Mejorar consulta de bases diferentes

Explica por favor que quiere decir "datos que realmente existen"?
Que existen donde?
Quizas te sirva DISTINCT. Has probado con EXISTS?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 20/10/2010, 11:16
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Mejorar consulta de bases diferentes

Gracias por responder, con datos que realmente existen me refiero a que solo me arroje como resultado los 400000 registros y no los 1457000 que me esta arrojando.
si ya probe con exists, distinct, intersect, y me sigue arrojando como resultado 1457000 registros, creo que mescla el primer registro de la tabl1 con todos los registros de la tabla2, el segundo registro de la tabla1 con todos los registros de la tabla2 y asi sucesivamente.
  #4 (permalink)  
Antiguo 20/10/2010, 11:31
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Mejorar consulta de bases diferentes

Tienes razon, ese es el problema. Debes hacer el join por algun otro campo mas.
Ponnos unos registros de ejemplo de ambas tablas.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 20/10/2010, 11:45
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Mejorar consulta de bases diferentes

bueno aqui te dejo las dos tablas:
Tabla Altas_Catastro (ac.):
CLVE_CAT
RNGO_CTA
NMBRE_P
DMCLIO_L
DMCLIO_N
LCLDD
MOV_HCHO
RGION
SUP_T
VLR_T
SUP_C
VLR_C
CNS_AD
FCHA_AVL
FHCA_ALT
FCHA_NOT
TPO_AVL
CLSE_PRE
BSS_GRVBLS
FCHA_RGSTRO
ID_MNCPIO_MVMIENTO
ID_USUARIO
ESTTS OBSRVCIONS

Tabla Usuarios_movimientos (um.):
Id_Usuario
Tpo_Mvmiento
Fcha_Mvmiento
Cuenta_Prdial


te vuelvo a poner mi query:

select null, ac.CLVE_CAT, CLSE_PRE,
ac.SUP_T, ac.SUP_C, ac.VLR_T, ac.VLR_C, ac.CNS_AD, ac.BSS_GRVBLS, ac.FCHA_AVL,
um.Tpo_Mvmiento, um.Fcha_Mvmiento, ac.NMBRE_P, ac.DMCLIO_L, ac.MOV_HCHO, null, null, null, null, null,
null from BD_PADRON_CATASTRAL..Altas_Catastro as ac inner join BD_PADRON_CATASTRAL..Usuarios_Movimientos as um on
ac.CLVE_CAT = um.Cuenta_Prdial


recuerda los null son solo para rellenar la tabla destino.
las tablas se pueden relacionar por:
CLVE_CAT = Cuenta_Prdial
o por
ID_USUARIO= Id_Usuario


de antemano muchas gracias
  #6 (permalink)  
Antiguo 20/10/2010, 11:55
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Mejorar consulta de bases diferentes

Te pongo un ejemplo de los registros de "Usuarios_movimientos" que existen en "Altas_Catastro"

Código SQL:
Ver original
  1. SELECT * FROM BD_PADRON_CATASTRAL..Usuarios_Movimientos A WHERE EXISTS(SELECT * FROM BD_PADRON_CATASTRAL..Altas_Catastro B WHERE A.Id_Usuario = B.Id_Usuario)
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 20/10/2010, 12:01
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Mejorar consulta de bases diferentes

oye muchas gracias, creo que con eso ya funciona me da un poco mas de registros pero ya son minimos muchas gracias.

una ultima pregunta como doy por cerrado el tema?
  #8 (permalink)  
Antiguo 20/10/2010, 14:28
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Mejorar consulta de bases diferentes

hola, me acaba de surgir un problema lo que pasa que realice la consulta siguiendo tu ejemple y el query queda asi:

select null, ac.CLVE_CAT, ac.CLSE_PRE,
ac.SUP_T, ac.SUP_C, ac.VLR_T, ac.VLR_C, ac.CNS_AD, ac.BSS_GRVBLS, ac.FCHA_AVL,
ac.NMBRE_P, ac.DMCLIO_L, ac.MOV_HCHO, null, null, null, null, null,
null from BD_PADRON_CATASTRAL..Altas_Catastro as ac where exists
(select u.Tpo_Mvmiento, u.Fcha_Mvmiento from BD_PADRON_CATASTRAL..Usuarios_Movimientos as u where u.Cuenta_Prdial = ac.CLVE_CAT)

y funciona perfecto el problema es que en la table final necesito los campos

Mvmiento
u.Fcha_Mvmiento

ya que asi como esta el query no los muestra en la tabla, y cuando subo los nombres de las tablas no me funciona vuelvo a caer al problema que tenia antes, quisiera ver como puedo hacerle para subir esos registros, en primer instancia pense en algo asi pero no funciona:

select null, ac.CLVE_CAT, ac.CLSE_PRE,
ac.SUP_T, ac.SUP_C, ac.VLR_T, ac.VLR_C, ac.CNS_AD, ac.BSS_GRVBLS, ac.FCHA_AVL,
um.Tpo_Mvmiento, um.Fcha_Mvmiento, ac.NMBRE_P, ac.DMCLIO_L, ac.MOV_HCHO, null, null, null, null, null,
null from BD_PADRON_CATASTRAL..Altas_Catastro as ac, BD_PADRON_CATASTRAL..Usuarios_Movimientos as um where exists
(select um.Tpo_Mvmiento, um.Fcha_Mvmiento from BD_PADRON_CATASTRAL..Usuarios_Movimientos as um where um.Cuenta_Prdial = ac.CLVE_CAT)

eso me genera 1457000 registros cuando solo tengo 400000 registros de antemano muchas gracias
  #9 (permalink)  
Antiguo 20/10/2010, 16:16
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Mejorar consulta de bases diferentes

Buenas Tardes uisalberto_tg:

Tal como lo han comentado los compañeros Flaviovich e Iislas el problema es que se está realizando un producto cartesiano entre tus tablas, pero debido a que necesitas información de ambas tablas entonces creo que es forzoso hacer el JOIN entre las tablas.

Cita:
las tablas se pueden relacionar por:
CLVE_CAT = Cuenta_Prdial
o por
ID_USUARIO= Id_Usuario
Creo que entonces tu JOIN debería ser más o menos así:

Código SQL:
Ver original
  1. FROM BD_PADRON_CATASTRAL.Altas_Catastro AC
  2. INNER JOIN BD_PADRON_CATASTRAL.Usuarios_Movimientos UM
  3. ON AC.CLVE_CAT = UM.Cuenta_Prdial AND
  4. AC.ID_USUARIO = UM.id_Usuario

Incluso en ambas tablas manejas fechas:

Altas_Catastro (FCHA_AVL, FHCA_ALT, FCHA_NOT, FCHA_RGSTRO)
Usuarios_movimientos (Fcha_Mvmiento)

¿Alguna de estas fechas no tienen relación?

También el campo tipo Tpo_Mvmiento de tu tabla Usuarios_movimientos pudiera estar relacionado con los campos MOV_HCHO o TPO_AVL, checa este punto.

Saludos.
Leo.
  #10 (permalink)  
Antiguo 20/10/2010, 16:46
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Mejorar consulta de bases diferentes

Hola leo gracias por responder, probe la solucion que diste y no me funciono, la respuesta optima me la dio islas que es este query:
select null, ac.CLVE_CAT, ac.CLSE_PRE, ac.SUP_T, ac.SUP_C, ac.VLR_T, ac.VLR_C,
ac.CNS_AD, ac.BSS_GRVBLS, ac.FCHA_AVL, ac.NMBRE_P, ac.DMCLIO_L, ac.MOV_HCHO, null, null, null, null, null,
null from BD_PADRON_CATASTRAL..Altas_Catastro as ac where exists (select u.Tpo_Mvmiento, u.Fcha_Mvmiento from
BD_PADRON_CATASTRAL..Usuarios_Movimientos as u where u.Cuenta_Prdial = ac.CLVE_CAT)

pero resulta que asi en la tabla donde se insertaran esos datos me faltarian dos campos que son u.Tpo_Mvmiento y u.Fcha_Mvmiento, si los coloco en el select de arriba me da como resultado 1457000 registros, y si los dejo abajo me dan 400000 que son los registros que exactamente yo tengo, quisiera ver como se le pusiera hacer para subir esos dos campos y como resultado me den los 400000 registros.

con respecto a las fechas ninguna se relaciona, los unicos campos relaciondos son : CLVE_CAT = Cuenta_Prdial
o por
ID_USUARIO= Id_Usuario

muchas gracias por tu atencion
  #11 (permalink)  
Antiguo 20/10/2010, 16:53
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Mejorar consulta de bases diferentes

A ver probemos así:
Código SQL:
Ver original
  1. SELECT NULL, ac.CLVE_CAT, ac.CLSE_PRE, ac.SUP_T, ac.SUP_C, ac.VLR_T, ac.VLR_C, ac.CNS_AD, ac.BSS_GRVBLS, ac.FCHA_AVL,
  2. ac.NMBRE_P, ac.DMCLIO_L, ac.MOV_HCHO, NULL, NULL, NULL, NULL, NULL, NULL, Tpo_Mvmiento, Fcha_Mvmiento
  3. FROM BD_PADRON_CATASTRAL..Altas_Catastro AS ac
  4. LEFT JOIN (
  5.     SELECT DISTINCT Cuenta_Prdial, id_Usuario, Tpo_Mvmiento, Fcha_Mvmiento
  6.     FROM BD_PADRON_CATASTRAL..Usuarios_Movimientos
  7. ) u ON ac.CLVE_CAT = u.Cuenta_Prdial OR AC.ID_USUARIO = U.id_Usuario
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #12 (permalink)  
Antiguo 20/10/2010, 17:27
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Mejorar consulta de bases diferentes

todavia no funciona hizo un desbordamiento de memoria no termino de realizar la consulta.


seguire intentandolo mañana, muchas gracias por responder.
  #13 (permalink)  
Antiguo 21/10/2010, 08:25
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: Mejorar consulta de bases diferentes

Me da a mi que es tema de COLLATION

Una de las primeras cosas que me enseñaron o aprendí al realizar uniones entre tablas y comparar campos es que éstos debían compararse con el mismo collation ya que si no el contenido aunque aparentemente fueran igual no los trata como tal.
Ejemplo de esto son las fechas.

Si una fecha en una tabla es tipo 01/01/10 y en la otra es tipo 01/01/2010 aparentemente son iguales pero a la hora de comparar no los trata como tal...

Al tema: Te has cerciorado que tengan el mismo collation? Has probado a hacer la comparación de las fechas forzando el mismo collation?

Saludos
  #14 (permalink)  
Antiguo 21/10/2010, 09:18
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Mejorar consulta de bases diferentes

Que yo sepa el collation no aplica a fechas, solo a datos de tipo caracter.
Cuando el collation no es igual, te sale error.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #15 (permalink)  
Antiguo 21/10/2010, 09:52
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Mejorar consulta de bases diferentes

hola sigo con el mismo error ya intente subir los nombres de columnas, intente con union pero no me funciona nada solo quiero que mi query:

select null, ac.CLVE_CAT, CLSE_PRE,
ac.SUP_T, ac.SUP_C, ac.VLR_T, ac.VLR_C, ac.CNS_AD, ac.BSS_GRVBLS, ac.FCHA_AVL,
um.Tpo_Mvmiento, um.Fcha_Mvmiento, ac.NMBRE_P, ac.DMCLIO_L, ac.MOV_HCHO, null, null, null, null, null,
null from BD_PADRON_CATASTRAL..Altas_Catastro as ac inner join BD_PADRON_CATASTRAL..Usuarios_Movimientos as um on
ac.CLVE_CAT = um.Cuenta_Prdial.

esos registros quiero que queden en el select de arriba pero al pasarlos me crea el producto cartesiano de 1457000 que es un error porque yo solo tengo 400000.

ojala alguien me pueda ayudar, de antemano se los agradeceria.
  #16 (permalink)  
Antiguo 21/10/2010, 11:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Mejorar consulta de bases diferentes

Hola de nuevo luisalberto_tg

Creo que definitivamente la relación entre sus tablas no es entonces 1 a 1... puedes ejecutar estas sentencias para ver qué resultados arroja?

Código SQL:
Ver original
  1. SELECT
  2. AC.CLVE_CAT,
  3. (
  4. SELECT COUNT(*)
  5. FROM BD_PADRON_CATASTRAL.Usuarios_Movimientos UM
  6. WHERE um.Cuenta_Prdial = ac.CLVE_CAT
  7. ) AS total
  8. FROM
  9. BD_PADRON_CATASTRAL.Altas_Catastro AC

Código SQL:
Ver original
  1. SELECT
  2. AC.Id_Usuario,
  3. (
  4. SELECT COUNT(*)
  5. FROM BD_PADRON_CATASTRAL.Usuarios_Movimientos UM
  6. WHERE um.Id_Usuario = ac.Id_Usuario
  7. ) AS total
  8. FROM
  9. BD_PADRON_CATASTRAL.Altas_Catastro AC

Esto es para determinar cuál es la relación entre tus tablas.

También nos serviría de mucho que pusieras algunos datos de ejemplo y de ser posible que nos enviaras alguna imagen de tus resultados (puedes subir tus imágenes a http://img248.imageshack.us/)

Saludos.
Leo.
  #17 (permalink)  
Antiguo 21/10/2010, 12:33
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Mejorar consulta de bases diferentes

bueno creo que lo voy a realizar con un cursor, no lo queria hacer asi ya que tarda mucho cuando ejecuto el sp, pero creo que es la mejor opcion, ahora me surge otra duda, ¿se puede trabajar con 2 cursores abiertos al mismo tiempo?, no se si esta bien dicho per, se podra trabajar con un cursor dentro de otro cursor?
  #18 (permalink)  
Antiguo 21/10/2010, 12:41
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Mejorar consulta de bases diferentes

Puedes utilizar los CURSORES abiertos cuantos quieras y cuantos te aguante tu servidor, solo recuerda, ¿quieres matar el nivel de respuesta de tu servidor (performance)?, pues trabaja con cursores.
__________________
MCTS Isaias Islas
  #19 (permalink)  
Antiguo 21/10/2010, 14:44
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: Mejorar consulta de bases diferentes

Cita:
Iniciado por luisalberto_tg Ver Mensaje
bueno creo que lo voy a realizar con un cursor, no lo queria hacer asi ya que tarda mucho cuando ejecuto el sp, pero creo que es la mejor opcion, ahora me surge otra duda, ¿se puede trabajar con 2 cursores abiertos al mismo tiempo?, no se si esta bien dicho per, se podra trabajar con un cursor dentro de otro cursor?
Hola, nos podrías decir en qué te basas para afirmar que es mejor con cursores?

Creo que la opción que te expone leonardo_josue es de la más acertada... Hay que ver la relación exacta para afinar la query.

Es mi opinión personal

Saludos
  #20 (permalink)  
Antiguo 21/10/2010, 15:30
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Mejorar consulta de bases diferentes

A ver prueba asi:
Código SQL:
Ver original
  1. SELECT NULL, ac.CLVE_CAT, ac.CLSE_PRE, ac.SUP_T, ac.SUP_C, ac.VLR_T, ac.VLR_C, ac.CNS_AD, ac.BSS_GRVBLS, ac.FCHA_AVL,
  2. ac.NMBRE_P, ac.DMCLIO_L, ac.MOV_HCHO, NULL, NULL, NULL, NULL, NULL, NULL, Tpo_Mvmiento, Fcha_Mvmiento
  3. FROM BD_PADRON_CATASTRAL..Altas_Catastro AS ac
  4. INNER JOIN (
  5.     SELECT Cuenta_Prdial, MAX(Tpo_Mvmiento) Tpo_Mvmiento, MAX(Fcha_Mvmiento) Fcha_Mvmiento
  6.     FROM BD_PADRON_CATASTRAL..Usuarios_Movimientos
  7.     GROUP BY Cuenta_Prdial
  8. ) u ON ac.CLVE_CAT = u.Cuenta_Prdial
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #21 (permalink)  
Antiguo 21/10/2010, 17:27
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Mejorar consulta de bases diferentes

perfecto esa fue la solucion!!!!

muchas gracias flaviovich te estoy muy agradecido, gracias a todos por tomarse la molestia de ayudarme.

Etiquetas: bases, distintas, duplicacion, registros, relacionadas, sql, tablas
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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 02:52.