Verificar o Conteúdo de um campo de uma tabela, em outra tabela do Sql Server
31/05/2023
0
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
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
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 !!!
01/06/2023
Arthur Heinrich
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.
02/06/2023
Roberto
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 !!!
03/06/2023
Emerson Nascimento
Sobre o uso de índices, esse campo SB1.B1_OPC parte de uma modelagem ruim, pra não dizer péssima.
Clique aqui para fazer login e interagir na Comunidade :)