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

[SOLUCIONADO] Comparar dos tablas

Estas en el tema de Comparar dos tablas en el foro de SQL Server en Foros del Web. Hola a todos. Tengo un problema con una consulta que al parecer esta incompleta porque solo tengo una tabla, necesito hacer una comparación de dos ...
  #1 (permalink)  
Antiguo 14/01/2014, 10:23
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Comparar dos tablas

Hola a todos.

Tengo un problema con una consulta que al parecer esta incompleta porque solo tengo una tabla, necesito hacer una comparación de dos tablas que contienen los mismos campos pero quiero saber que registros se encuentran en una tabla y en la otra no. Como puedo modificar mi consulta para que me quede así.

Esta es mi consulta pero quiero meter otra tabla solo que no se si usar inner JOin o Cross JOin que me sugieren
Código SQL:
Ver original
  1. SET @QUERY = 'SELECT GB.RFCH, PRD.NOMBRE, GB.CODIGO,GB.CENRES, GB.TRAIMP,GB.IDTIPNOM, GB.TRADAT,
  2. replace(replace(replace(replace(replace(replace(replace(replace(replace((replace(GB.TRADAT , 0,'+CHAR(39)+CHAR(39)+')),1,'+CHAR(39)+CHAR(39)+'),2,'+CHAR(39)+CHAR(39)+'),3,'+CHAR(39)+CHAR(39)+'),4,'+CHAR(39)+CHAR(39)+'),5,'+CHAR(39)+CHAR(39)+'),6,'+CHAR(39)+CHAR(39)+'),7,'+CHAR(39)+CHAR(39)+'),8,'+CHAR(39)+CHAR(39)+'),9,'+CHAR(39)+CHAR(39)+') DATO
  3. FROM '+ @GBL + ' GB INNER JOIN '+ @AÑOQUIN + ' PRD ON GB.RFCH = PRD.RFCH
  4. WHERE GB.numrec = PRD.NUMREC
  5. AND GB.IDTIPNOM = PRD.IDTIPNOM
  6. AND GB.TRACVE = '+CHAR(39)+'30'+CHAR(39)
  7.  
  8. EXEC sp_executesql @QUERY
  #2 (permalink)  
Antiguo 14/01/2014, 10:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Comparar dos tablas

depende de como esten tus tablas, si en las 2 necesitas que exista la info, inner join, si en una esta la info y en la otra no left join....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 14/01/2014, 10:43
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: Comparar dos tablas

Entonces si quiero comparar todos los registros pero solo quiero traer la diferencia con un left es posible?
  #4 (permalink)  
Antiguo 14/01/2014, 10:50
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Comparar dos tablas

asi es :) un left join te trae los registros que existen en la tabla a mas los que estan en la tabla b hagan o no hagan match :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 14/01/2014, 10:55
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: Comparar dos tablas

M pero por ejemplo yo no quiero que me traiga todo solo lso que no estan eso tambien se hace así¡?
  #6 (permalink)  
Antiguo 14/01/2014, 10:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Comparar dos tablas

si con un left join puedes hacerlo

los que no estan en la tabla2

Código SQL:
Ver original
  1. SELECT * FROM tabla1 AS t1
  2. LEFT JOIN tabla2 AS t2 ON (t1.id=t2.id)
  3. WHERE t1.id IS NULL

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 14/01/2014, 11:29
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: Comparar dos tablas

OOo entonces otra duda el right funciona de la misma manera qeu el left?
  #8 (permalink)  
Antiguo 14/01/2014, 11:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Comparar dos tablas

asi es pero con la otra tabla ;)

Código SQL:
Ver original
  1. SELECT * FROM tabla1 AS t1
  2. RIGHT JOIN tabla2 AS t2 ON (t1.id=t2.id)
  3. WHERE t2.id IS NULL
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 14/01/2014, 12:15
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: Comparar dos tablas

Algo con seguridad estoy haciendo mal Tengo esta consulta lo que quiero es traer todos los conceptos que tiene mi tabla P1 que no estan en la tabla P2 pero que tienen el concepto 30 de otra tabla Y no me esta saliendo

Código SQL:
Ver original
  1. SELECT * FROM PRD1322 p1 LEFT JOIN PRD1321  p2 ON p1.RFCH = p2.RFCH  INNER JOIN GBL2013 GB ON p1.RFCH = GB.RFCH  
  2.  WHERE  
  3.  GB.TRACVE = '30' AND p2.RFCH IS NULL
  #10 (permalink)  
Antiguo 14/01/2014, 12:19
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Comparar dos tablas

un pequeño ejemplo de tus datos seria de mucha ayuda,

prueba con esto:

Código SQL:
Ver original
  1. SELECT * FROM (
  2. SELECT * FROM PRD1322 p1 LEFT JOIN PRD1321  p2 ON p1.RFCH = p2.RFCH  
  3. WHERE p2.RFCH IS NULL
  4. ) test
  5. INNER JOIN GBL2013 GB ON test.RFCH = GB.RFCH  
  6.  WHERE  
  7.  GB.TRACVE = '30'
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 14/01/2014, 13:18
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: Comparar dos tablas

Me esta marcando error en el test

Cita:
Mens. 8156, Nivel 16, Estado 1, Línea 1
La columna 'ID_REG' se ha especificado varias veces para 'TEST'.
  #12 (permalink)  
Antiguo 14/01/2014, 13:23
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Comparar dos tablas

Código SQL:
Ver original
  1. SELECT * FROM (
  2. SELECT p1.columa1,p1.columna2,p1.columna3....p1.columnaN,p2.columna1,p2.columna2,p2.columna3,...........p2.columnaN FROM PRD1322 p1 LEFT JOIN PRD1321  p2 ON p1.RFCH = p2.RFCH  
  3. WHERE p2.RFCH IS NULL
  4. ) test
  5. INNER JOIN GBL2013 GB ON test.RFCH = GB.RFCH  
  6.  WHERE  
  7.  GB.TRACVE = '30'

El error se refiere a que la tabla PRD1321 y la tabla PRD1322 tienen un campo en comun ID_REG y como se esta haciendo un select * from tabla1, left join tabla2 el campo aparece 2 veces con el mismo nombre y eso en un subquery no se puede hacer....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 14/01/2014, 13:27
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: Comparar dos tablas

Sr. Libras podria explicarme qeu hizo?
  #14 (permalink)  
Antiguo 14/01/2014, 14:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Comparar dos tablas

como trate de explicarte tus tablas que estas uniendo tiene campo en comun con el mismo nombre (ID_REG) como en un subquery no pueden existir 2 columnas con el mismo nombre te marca el error lo que debes de hacer es ponerle un alias a tus columnas(las que repiten el nombre de columna) y con eso solucionas el error que te aparece :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 14/01/2014, 15:07
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: Comparar dos tablas

Sr libras como siempre me ha iluminado la respuesta, la hice la siguiente manera para obtener los datos que necesitaba..
Mil gracias
Código SQL:
Ver original
  1. SELECT NOMBRE,RFC  FROM (SELECT *  FROM (SELECT RFCH RFC,  COUNT (RFCH) CANTIDAD
  2. FROM GBL2013
  3. WHERE QNAPROC IN (21,22)
  4. AND TRACVE LIKE '30'
  5. GROUP BY RFCH
  6. HAVING COUNT (RFCH) < 2) TEST INNER JOIN GBL2013 GB ON TEST.RFC= GB .RFCH
  7. WHERE GB.QNAPROC = 22
  8. AND TRACVE LIKE '30') TEST2 RIGHT JOIN PRD1322 ON TEST2.numrec  = PRD1322.NUMREC  
  9. WHERE RFC IS NOT NULL
  #16 (permalink)  
Antiguo 14/01/2014, 16:16
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: Comparar dos tablas

Yo cambiaria

Código SQL:
Ver original
  1. WHERE QNAPROC IN (21,22)

Por:

Código SQL:
Ver original
  1. WHERE QNAPROC >= 21 AND QNAPROC <= 22

También podría utilizarse BETWEEN

A menos que fuera muy necesario el LIKE '30', de lo contrario con un = '30' bastaria
__________________
MCTS Isaias Islas

Etiquetas: campo, select, tabla, 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 1 personas




La zona horaria es GMT -6. Ahora son las 10:05.