Verificar o Conteúdo de um campo de uma tabela, em outra tabela do Sql Server

31/05/2023

0

Bom dia,

Tudo bem ?

Por favor, Gostaria de saber se é possível efetuarmos uma pesquina no sql pesquisando se o conteudo de um campo, está contido no conteudo do campo de outra tabela
Exemplo:

Tabela SG1
G1_COD = 03837
G1_COMP = 04056
G1_GROPC = 037
G1_OPC = 0000

Tabela SB1
B1_COD 03837
B1_OPC 0370000/



SELECT G1_COD,G1_COMP,G1_GROPC
FROM SG1010 SG1 WITH(NOLOCK),SB1010 SB1 WITH(NOLOCK)
WHERE SG1.G1_REVFIM = 'ZZZ'
AND SG1.D_E_L_E_T_ = ''
AND SG1.G1_COD = SB1.B1_COD
AND SB1.D_E_L_E_T_ = ''
AND SG1.G1_GROPC <> ''
AND SB1.B1_MSBLQL <> '1'

--- o problema está aqui não consigo utilizer o like por se tratar de um campo, existe algum outro comando que possa efetuar a pesquisa o conteudo de (G1_GROPC+G1_OPC) no campo B1_OPC ?
AND EXISTS (SELECT B1_COD FROM SB1010 ASB1 WHERE (SG1.G1_GROPC+SG1.G1_OPC) = B1_OPC AND SG1.G1_COD like ASB1.B1_COD AND ASB1.D_E_L_E_T_ = '')

ORDER BY G1_COD,G1_GROPC

Desde já agradeço a orientação e ajudar
Roberto

Roberto

Responder

Post mais votado

31/05/2023

SELECT
	G1_COD,G1_COMP,G1_GROPC
FROM
	SG1010 SG1 WITH(NOLOCK), SB1010 SB1 WITH(NOLOCK)
WHERE
	SG1.G1_REVFIM = 'ZZZ'
	AND SG1.D_E_L_E_T_ = ''
	AND SB1.D_E_L_E_T_ = ''
	AND SG1.G1_GROPC <> ''
	AND SB1.B1_MSBLQL <> '1'
	AND SB1.B1_OPC LIKE (SG1.G1_GROPC+SG1.G1_OPC)+'/%'

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

01/06/2023

Roberto

SELECT
	G1_COD,G1_COMP,G1_GROPC
FROM
	SG1010 SG1 WITH(NOLOCK), SB1010 SB1 WITH(NOLOCK)
WHERE
	SG1.G1_REVFIM = 'ZZZ'
	AND SG1.D_E_L_E_T_ = ''
	AND SB1.D_E_L_E_T_ = ''
	AND SG1.G1_GROPC <> ''
	AND SB1.B1_MSBLQL <> '1'
	AND SB1.B1_OPC LIKE (SG1.G1_GROPC+SG1.G1_OPC)+'/%'



Muito Obrigado !!!

Ajudou Muito !!!
Responder

01/06/2023

Arthur Heinrich

Eu estou entendendo que a coluna SB1.B1_OPC pode conter múltiplos códigos, separados por "/": Ex.: CODIGO1/CODIGO2/CODIGO3

O filtro precisa considerar que o código pesquisado pode ser o primeiro, o último ou um intermediário qualquer.

Para garantir que pegue o código correto, o filtro:

AND SB1.B1_OPC LIKE (SG1.G1_GROPC+SG1.G1_OPC)+'/%'

Precisa ser ligeiramente modificado para:

AND '/'+SB1.B1_OPC+'/' LIKE '%/'+SG1.G1_GROPC+SG1.G1_OPC+'/%'

Lembrando que isto é apenas um filtro e não serve como mecanismo de busca com índices. Se o join não for estabelecido por outras características seletivas, o desempenho da query pode ser prejudicado.
Responder

02/06/2023

Roberto

Eu estou entendendo que a coluna SB1.B1_OPC pode conter múltiplos códigos, separados por "/": Ex.: CODIGO1/CODIGO2/CODIGO3

O filtro precisa considerar que o código pesquisado pode ser o primeiro, o último ou um intermediário qualquer.

Para garantir que pegue o código correto, o filtro:

AND SB1.B1_OPC LIKE (SG1.G1_GROPC+SG1.G1_OPC)+'/%'

Precisa ser ligeiramente modificado para:

AND '/'+SB1.B1_OPC+'/' LIKE '%/'+SG1.G1_GROPC+SG1.G1_OPC+'/%'

Lembrando que isto é apenas um filtro e não serve como mecanismo de busca com índices. Se o join não for estabelecido por outras características seletivas, o desempenho da query pode ser prejudicado.


Bom dia Arthur,

Muito Obrigado !!!
Responder

03/06/2023

Emerson Nascimento

Bom observado, Arthur.

Sobre o uso de índices, esse campo SB1.B1_OPC parte de uma modelagem ruim, pra não dizer péssima.

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar