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Ü'
Avalados por :
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.
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Ü'
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 "=".
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.
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute