¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Otimize suas consultas SQL para evitar erros de correspondência: Dicas e exemplos

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

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.

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

3 Respuestas

0
Cargando...

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‹'
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

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 "=".

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

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.

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?