Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

247
Vistas
(sql desafiante) compare dos tablas para un valor diferente

Quiero comparar valores de table a & c y encontrar diferencias. Podemos especificar unique_key de table a comparando la id entre table a & b , y al hacer coincidir la unique_key de la table b & c , podemos comparar el Name de table a & c .

¿Podemos obtener la lista de filas cuyo Name tiene un valor diferente para la table a & c ?

Así que si escribo tabla,

 table a +----+------+-----------+ | id | Name | int_value | +----+------+-----------+ | a1 | aa | 1 | | a2 | bb | 2 | | a3 | cc | 5 | +----+------+-----------+ table b +----+------+-----------+ | id | Name |unique_key | +----+------+-----------+ | a1 | !! | u1 | | a2 | @@ | u2 | | a3 | ## | u3 | +----+------+-----------+ table c +----+------+-----------+ | id | Name |unique_key | +----+------+-----------+ | c1 | aa | u1 | | c2 | B1 | u2 | | c3 | C1 | u3 | +----+------+-----------+

Como resultado, quiero obtener

 NameA NameC unique_key bb B1 u2 cc C1 u3

Probé este sql, pero ninguno de ellos me dio el resultado correcto. ¿Qué harías?

 SELECT a.Name, c.Name, b.unique_key FROM a INNER JOIN b ON a.id = b.id LEFT JOIN c ON b.unique_key = c.unique_key and NOT EXISTS (SELECT * FROM a WHERE a.Name = b.Name);


sql real (para DB real) que hice

 SELECT i.*, g.*, r.g_id FROM i INNER JOIN r ON i.id = r.id LEFT JOIN g ON r.g_id = g.g_id WHERE CAST('i.name1' as varbinary) != CAST('g.name1' as varbinary) OR CAST('i.name2' as varbinary) != CAST('g.name2' as varbinary) OR CAST('i.name3' as varbinary) != CAST('g.name3' as varbinary) GROUP BY i.id LIMIT 30;

error que tengo:

 Error occurred.SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'varbinary) != CAST(
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede cast el field como BINARY antes de comparar

por defecto aa y AA , ambos son iguales

 SELECT i.*, g.*, r.g_id FROM i INNER JOIN r ON i.id = r.id LEFT JOIN g ON r.g_id = g.g_id WHERE CONVERT('i.name1' , BINARY) != CONVERT('g.name1' , BINARY) OR CONVERT('i.name2' , BINARY) != CONVERT('g.name2' , BINARY) OR CONVERT('i.name3', BINARY) != CONVERT('g.name3', BINARY) GROUP BY i.id LIMIT 30;
over 4 years ago · Santiago Trujillo Denunciar

0

Parece que solo quieres algunas uniones y una comparación:

 select a.name as nameA, c.name as nameC, b.unique_key from a join b on a.id = b.id join c on b.unique_key = c.unique_key where a.name <> c.name;

No veo por qué sería necesaria una comparación binaria para las columnas llamadas name . Pero puede usar la palabra clave binary si es realmente necesaria (no es necesaria para sus datos de muestra).

Además, su pregunta es específicamente sobre nombres diferentes, no sobre filas faltantes. Entonces, las uniones externas tampoco parecen apropiadas.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda