¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Optimiza tus consultas SQL para evitar errores de coincidencia: Consejos y ejemplos

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 6 Vistas
0
Cargando...

Dado estos dos tablas:

Crear Tabla TableA( TAFIELD1 Char( 5 ), TAFIELD2 CIChar( 50 ), TAFIELD3 Money );
INSERT INTO "TableA" VALUES( 'AAAAA', 'Primera Línea', 12.33 );
INSERT INTO "TableA" VALUES( 'CCCCC', 'Segunda Línea', 432.33 );
INSERT INTO "TableA" VALUES( 'XXXXÜ', 'Tercera Línea', 1 );

Crear Tabla TableB( TBFIELD1 Char( 5 ), TBFIELD2 CIChar( 20 ), TBFIELD3 CIChar( 10 ), TBFIELD4 CIChar( 20 ) );
INSERT INTO "TableB" VALUES( 'AAAAA', 'An der Brücke 1', '12345', 'Ciudad de Prueba' );
INSERT INTO "TableB" VALUES( 'BBBBB', 'Hauptgasse 64', '54321', 'Wicheln' );
INSERT INTO "TableB" VALUES( 'XXXXÜ', 'Lange Straße 210', '12345', 'Ciudad de Prueba' );

la consulta

SELECT ta.*, tb.*
FROM TableA ta INNER JOIN TableB tb ON ta.TaField1 = tb.TbField1
WHERE ta.TaField1 = 'AAAAA'

recupera una fila, como se esperaba. Pero si consultamos

SELECT ta.*, tb.*
FROM TableA ta INNER JOIN TableB tb ON ta.TaField1 = tb.TbField1
WHERE ta.TaField1 = 'XXXXÜ'

¡obtenemos cero filas!

Podemos evitar este error utilizando una consulta anidada

SELECT x.* FROM (
SELECT ta.*, tb.*
FROM TableA ta INNER JOIN TableB tb ON ta.TaField1 = tb.TbField1
) x WHERE x.TaField1 = 'XXXXÜ'

lo que resulta en una fila.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

3 Respuestas

0
Cargando...

Funciona si utilizas LIKE en lugar de =

SELECT ta.*, tb.*
FROM TableA ta INNER JOIN TableB tb ON ta.TaField1 = tb.TbField1
WHERE ta.TaField1 LIKE 'XXXXÜ'
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Bueno 🙂

Esto parece algo oficial ("nunca uses caracteres especiales en los campos JOIN"), pero no lo encontré en la documentación.

P.D.: si cambio el tipo del campo JOIN a "NChar", funciona con "=".

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

LIKE respeta la intercalación donde = utiliza una comparación byte a byte, lo cual podría fallar dependiendo de la configuración local;) NCHAR es Unicode y por lo tanto conoce los caracteres especiales.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?