Funciona se usar LIKE em vez de =
SELECT ta.*, tb.*
FROM TableA ta INNER JOIN TableB tb ON ta.TaField1 = tb.TbField1
WHERE ta.TaField1 LIKE 'XXXX‹'
Avalados por :
Dadas estas dos tabelas:
Criar Tabela TableA( TAFIELD1 Char( 5 ), TAFIELD2 CIChar( 50 ), TAFIELD3 Money );
INSERT INTO "TableA" VALUES( 'AAAAA', 'Primeira Linha', 12.33 );
INSERT INTO "TableA" VALUES( 'CCCCC', 'Segunda Linha', 432.33 );
INSERT INTO "TableA" VALUES( 'XXXXÜ', 'Terceira Linha', 1 );
Criar Tabela TableB( TBFIELD1 Char( 5 ), TBFIELD2 CIChar( 20 ), TBFIELD3 CIChar( 10 ), TBFIELD4 CIChar( 20 ) );
INSERT INTO "TableB" VALUES( 'AAAAA', 'An der Brücke 1', '12345', 'Cidade de Teste' );
INSERT INTO "TableB" VALUES( 'BBBBB', 'Hauptgasse 64', '54321', 'Wicheln' );
INSERT INTO "TableB" VALUES( 'XXXXÜ', 'Lange Straße 210', '12345', 'Cidade de Teste' );
a consulta
SELECT ta.*, tb.*
FROM TableA ta
INNER JOIN TableB tb ON ta.TaField1 = tb.TbField1
WHERE ta.TaField1 = 'AAAAA'
recupera uma linha, como esperado. Mas se consultarmos
SELECT ta.*, tb.*
FROM TableA ta INNER JOIN TableB tb ON ta.TaField1 = tb.TbField1
WHERE ta.TaField1 = 'XXXXÜ'
obtemos zero linhas!
Podemos evitar esse erro usando uma consulta aninhada
SELECT x.* FROM (
SELECT ta.*, tb.*
FROM TableA ta
INNER JOIN TableB tb ON ta.TaField1 = tb.TbField1
) x
WHERE x.TaField1 = 'XXXXÜ'
resultando em uma linha.
Funciona se usar LIKE em vez de =
SELECT ta.*, tb.*
FROM TableA ta INNER JOIN TableB tb ON ta.TaField1 = tb.TbField1
WHERE ta.TaField1 LIKE 'XXXX‹'
Bom 😊
Isso parece algo oficial ("nunca use caracteres especiais nos campos JOIN"), mas não encontrei na documentação.
Obs.: se eu mudar o tipo do campo JOIN para "NChar", funciona com "=".
O comando LIKE respeita a intercalação onde = usa uma comparação byte a byte, o que pode falhar dependendo da configuração local;) NCHAR é Unicode e, portanto, reconhece caracteres especiais.
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute