¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

¡Acceso SAP S/4HANA desde $100!

Acceso a SAP

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

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 7 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@primeconsultor.com

+1 (305) 285-8622

© 2025 Todos los derechos reservados.

Desarrollado por Prime Consultor

¡Hola! Soy Diana, asesora académica de Prime Consultor, indícame en que Academia SAP estás interesado, saludos!
Hola ¿Buscas Academias SAP?