Verificar o Conteúdo de um campo de uma tabela, em outra tabela do Sql Server
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
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
Curtidas 0
Melhor post
Emerson Nascimento
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)+'/%'
GOSTEI 1
Mais Respostas
Roberto
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)+'/%'
Muito Obrigado !!!
Ajudou Muito !!!
GOSTEI 0
Arthur Heinrich
31/05/2023
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.
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.
GOSTEI 1
Roberto
31/05/2023
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.
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 !!!
GOSTEI 0
Emerson Nascimento
31/05/2023
Bom observado, Arthur.
Sobre o uso de índices, esse campo SB1.B1_OPC parte de uma modelagem ruim, pra não dizer péssima.
Sobre o uso de índices, esse campo SB1.B1_OPC parte de uma modelagem ruim, pra não dizer péssima.
GOSTEI 0