Ir para conteúdo
Fórum Script Brasil
  • 0

Cruzar dados de tabelas


Marianne

Pergunta

Pessoal, tenho 2 tabelas

Categorias

==============

ID Categoria

1 Roupas

2 Calçados

3 Meias

4 Esporte

5 Masculinas

10 Feminina

11 Infantil

==============

Lojas

==============

ID Nome CategoriaId

1 Zé Maira 1,4,5

2 Meira Jr 2,3,4

3 Antonio 1,11,4

4 Maria 10,3,5

5 Joaozinho 1,2,3

=================

Para poder listar somente as lojas que estao dentro da categoria usei assim o Select

Puchando apenas as lojas q tenham a categoria 1

Select * from Lojas where CategoriaId Like '%1%'

PROBLEMA ..: Ele mostra as lojas de Id = 1,3 e 5 SENDO QUE PEDI APENAS OS QUE TEM A CATEGORIA 1

Como fazer para dar um Like e pegar apenas o 1 e não o 11 ou 111 buscando no campo?

Obrigado !

Editado por Marianne
Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Amigo, se perceber não tem logica a resposta pois não achará o campo unico, há varios Is sepados por virgula

Leia por favor a pergunda

Olá, bom dia...

tente assim:

"Select * from Lojas where CategoriaId = "1""

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Marianne, entenda... nunca tive interesse de lhe atrapalhar, muito pelo contrário... apenas de ajudar...

Perdi meu tempo, postando algo que acredito ser a solução da sua dúvida...

mas como interessante sempre é buscar esclarecimento das coisas, vejamos a sua pergunta:

Como fazer para dar um Like e pegar apenas o 1 e não o 11 ou 111 buscando no campo?

e esta fazendo referência a este select, posto por você:

Select * from Lojas where CategoriaId Like '%1%'

portanto, visto isto, mantenho a minha resposta...

Valhe destacar ainda que você editou seu post depois que postei minha resposta... e é preciso entender ainda que não ganho nada lhe ajudando Marianne, simplesmente ajudo por gostar de ajudar... Sempre leio com atençao as dúvidas de todos e respondo as dúvidas que sei...

Certamente você esperava derepente algo pronto, ou mastigado... esse não é o objetivo deste fórum, até onde eu sei...

Não gostou da minha resposta? Ora, é um forum aberto com uma equipe super inteligente... se postei algo errado certamente outra pessoa irá me corrigir, na tentativa de lhe ajudar... mas no meu entendimento, o mínimo que se deve fazer para receber alguma ajuda é ser simpático...

Se você postasse algo dizendo, acho que me expressei mau, ou telvés não tenha me feito entender, ou talvés ainda, acho que você não entendeu muito bem minha dúvida, pois meu problema é exatamente assim:... certamente ajudaria muito mais do que dar um bump no seu post, criticando quem lhe ajudou...

Já ajudei inúmeras pessoas aqui, tenho certeza disso, mas não vou conseguir agradar a todos nunca!

Reveja seu posicionamento e a forma como descreveu sua dúvida que eu tento lhe ajudar, mas da forma que esta agora "ultima edição 11/09/08 as 14:17" certamente deixa margens para interpretação, portanto não vou me arriscar a dar algum palpite que possa ser infundado!

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0
Pessoal, tenho 2 tabelas

Categorias

==============

ID Categoria

1 Roupas

2 Calçados

3 Meias

4 Esporte

5 Masculinas

10 Feminina

11 Infantil

==============

Lojas

==============

ID Nome CategoriaId

1 Zé Maira 1,4,5

2 Meira Jr 2,3,4

3 Antonio 1,11,4

4 Maria 10,3,5

5 Joaozinho 1,2,3

=================

Qual seria o resultado que você espera utilizando com base os dados acima.

Pelo que entedi o ID 1,3 e 5 tem a CategoriaId = 1! É isso?

Gerei um exemplo que pode dar um luz:

declare @Lojas table (ID int, Nome varchar(50), CategoriaId varchar(50))
insert into @Lojas (ID, Nome,CategoriaId )  values (1,'Zé Maira','1,4,5')
insert into @Lojas (ID, Nome,CategoriaId )  values (2,'Meira Jr','2,3,4')
insert into @Lojas (ID, Nome,CategoriaId )  values (3,'Antonio','1,11,4')
insert into @Lojas (ID, Nome,CategoriaId )  values (4,'Maria','10,3,5')
insert into @Lojas (ID, Nome,CategoriaId )  values (5,'Joaozinho','1,2,3')

declare @aux table (ID int, Nome varchar(50), CategoriaId varchar(50))

insert into @aux (ID, Nome,CategoriaId )
Select ID, Nome, ',' + CategoriaId + ',' from @Lojas where CategoriaId like ('1%')

select * from @aux
where charindex(',1,',CategoriaId) > 0

Favor responder os questionamentos para continuidade da soulção do post.

qualquer duvida é só postar!

Link para o comentário
Compartilhar em outros sites

  • 0
Marianne, entenda... nunca tive interesse de lhe atrapalhar, muito pelo contrário... apenas de ajudar...

Perdi meu tempo, postando algo que acredito ser a solução da sua dúvida...

mas como interessante sempre é buscar esclarecimento das coisas, vejamos a sua pergunta:

Como fazer para dar um Like e pegar apenas o 1 e não o 11 ou 111 buscando no campo?

e esta fazendo referência a este select, posto por você:

Select * from Lojas where CategoriaId Like '%1%'
portanto, visto isto, mantenho a minha resposta...

Valhe destacar ainda que você editou seu post depois que postei minha resposta... e é preciso entender ainda que não ganho nada lhe ajudando Marianne, simplesmente ajudo por gostar de ajudar... Sempre leio com atençao as dúvidas de todos e respondo as dúvidas que sei...

Certamente você esperava derepente algo pronto, ou mastigado... esse não é o objetivo deste fórum, até onde eu sei...

Não gostou da minha resposta? Ora, é um forum aberto com uma equipe super inteligente... se postei algo errado certamente outra pessoa irá me corrigir, na tentativa de lhe ajudar... mas no meu entendimento, o mínimo que se deve fazer para receber alguma ajuda é ser simpático...

Se você postasse algo dizendo, acho que me expressei mau, ou telvés não tenha me feito entender, ou talvés ainda, acho que você não entendeu muito bem minha dúvida, pois meu problema é exatamente assim:... certamente ajudaria muito mais do que dar um bump no seu post, criticando quem lhe ajudou...

Já ajudei inúmeras pessoas aqui, tenho certeza disso, mas não vou conseguir agradar a todos nunca!

Reveja seu posicionamento e a forma como descreveu sua dúvida que eu tento lhe ajudar, mas da forma que esta agora "ultima edição 11/09/08 as 14:17" certamente deixa margens para interpretação, portanto não vou me arriscar a dar algum palpite que possa ser infundado!

[]'s Rafael Spilki

Bla Bla Bla.. Vá pentear macaco Galvão Bueno e escrever um livro de poesias e lamentações. A Alteração que fiz foi somente no titulo pra verem que "uma pessoa" postou uma resposta mas não tinha resolvido minha duvida

Só você não entendeu a pergunta

Editado por Marianne
Link para o comentário
Compartilhar em outros sites

  • 0
Pessoal, tenho 2 tabelas

Categorias

==============

ID Categoria

1 Roupas

2 Calçados

3 Meias

4 Esporte

5 Masculinas

10 Feminina

11 Infantil

==============

Lojas

==============

ID Nome CategoriaId

1 Zé Maira 1,4,5

2 Meira Jr 2,3,4

3 Antonio 1,11,4

4 Maria 10,3,5

5 Joaozinho 1,2,3

=================

Qual seria o resultado que você espera utilizando com base os dados acima.

Pelo que entedi o ID 1,3 e 5 tem a CategoriaId = 1! É isso?

Gerei um exemplo que pode dar um luz:

declare @Lojas table (ID int, Nome varchar(50), CategoriaId varchar(50))
insert into @Lojas (ID, Nome,CategoriaId )  values (1,'Zé Maira','1,4,5')
insert into @Lojas (ID, Nome,CategoriaId )  values (2,'Meira Jr','2,3,4')
insert into @Lojas (ID, Nome,CategoriaId )  values (3,'Antonio','1,11,4')
insert into @Lojas (ID, Nome,CategoriaId )  values (4,'Maria','10,3,5')
insert into @Lojas (ID, Nome,CategoriaId )  values (5,'Joaozinho','1,2,3')

declare @aux table (ID int, Nome varchar(50), CategoriaId varchar(50))

insert into @aux (ID, Nome,CategoriaId )
Select ID, Nome, ',' + CategoriaId + ',' from @Lojas where CategoriaId like ('1%')

select * from @aux
where charindex(',1,',CategoriaId) > 0

Favor responder os questionamentos para continuidade da soulção do post.

qualquer duvida é só postar!

Oi Amigo, é isso mesmo mas só tive o mesmo problema :(

Assim usei no meu Select:

ReqCatId = 1

Select Id,Nome,CategoriaId ,Endereco ',' + CategoriaId + ',' from Loja where Status = 1 AND CategoriaId like ('"&ReqCatId&"%') order by Nome Asc

Problema é que na tabela existe um registro que possui a categoria 14 ou 15 ou 16 assim = 8,3,5,14,13

Não tem a categoria 1 mas como a categoria 13 começa com 1 ele mostra o registro>

Me ajudem por favor :((

Editado por Marianne
Link para o comentário
Compartilhar em outros sites

  • 0
Bla Bla Bla.. Vá pentear macaco Galvão Bueno e escrever um livro de poesias e lamentações. A Alteração que fiz foi somente no titulo pra verem que "uma pessoa" postou uma resposta mas não tinha resolvido minha duvida

Só você não entendeu a pergunta

Nossa Marianne, como você é educada!

Não é só eu que não entendo suas perguntas não é mesmo???

http://scriptbrasil.com.br/forum/index.php...=118714&hl=

Editado por Rafael Spilki
Link para o comentário
Compartilhar em outros sites

  • 0

Fiz este exemplo mais simples:

declare @filtro varchar(200)
set @filtro = ',1,'

declare @Lojas table (ID int, Nome varchar(50), CategoriaId varchar(50))
insert into @Lojas (ID, Nome,CategoriaId )  values (1,'Zé Maira','1,4,5')
insert into @Lojas (ID, Nome,CategoriaId )  values (2,'Meira Jr','2,3,4')
insert into @Lojas (ID, Nome,CategoriaId )  values (3,'Antonio','1,11,4')
insert into @Lojas (ID, Nome,CategoriaId )  values (4,'Maria','10,3,5')
insert into @Lojas (ID, Nome,CategoriaId )  values (5,'Joaozinho','1,2,3')
insert into @Lojas (ID, Nome,CategoriaId )  values (5,'Valter','11,12,13')

select * from @Lojas
where  charindex(@filtro, ',' + CategoriaId + ',') > 0

--Resultado
ID   Nome    CategoriaId                                        
-- ---------- ---------
1  Zé Maira   1,4,5
3  Antonio    1,11,4
5  Joaozinho  1,2,3

Marianne acho que a melhor solução seria o uso do charindex ao ives do like.

A função charindex pois esta função retorna a posição inicial onde um determinda string se inicia em outra string.

No exemplo concateno , ao campo da tabela CategoriaId (,1,11,4,) e ao filtro (,1,) e depois fiz um where onde retorno todos os registro em que o charindex é maior que 0. Ou onde a CategoriaId contenha o filtro.

De uma luz ou complicou mai?

Rode o scritp de exemplo e veja se esta ok ou o que deve ser alterado.

E não se preocupe que resolveremos esta parada.

Link para o comentário
Compartilhar em outros sites

  • 0
Fiz este exemplo mais simples:

declare @filtro varchar(200)
set @filtro = ',1,'

declare @Lojas table (ID int, Nome varchar(50), CategoriaId varchar(50))
insert into @Lojas (ID, Nome,CategoriaId )  values (1,'Zé Maira','1,4,5')
insert into @Lojas (ID, Nome,CategoriaId )  values (2,'Meira Jr','2,3,4')
insert into @Lojas (ID, Nome,CategoriaId )  values (3,'Antonio','1,11,4')
insert into @Lojas (ID, Nome,CategoriaId )  values (4,'Maria','10,3,5')
insert into @Lojas (ID, Nome,CategoriaId )  values (5,'Joaozinho','1,2,3')
insert into @Lojas (ID, Nome,CategoriaId )  values (5,'Valter','11,12,13')

select * from @Lojas
where  charindex(@filtro, ',' + CategoriaId + ',') > 0

--Resultado
ID   Nome    CategoriaId                                        
-- ---------- ---------
1  Zé Maira   1,4,5
3  Antonio    1,11,4
5  Joaozinho  1,2,3

Marianne acho que a melhor solução seria o uso do charindex ao ives do like.

A função charindex pois esta função retorna a posição inicial onde um determinda string se inicia em outra string.

No exemplo concateno , ao campo da tabela CategoriaId (,1,11,4,) e ao filtro (,1,) e depois fiz um where onde retorno todos os registro em que o charindex é maior que 0. Ou onde a CategoriaId contenha o filtro.

De uma luz ou complicou mai?

Rode o scritp de exemplo e veja se esta ok ou o que deve ser alterado.

E não se preocupe que resolveremos esta parada.

Oi Jotaz, Obrigada pela atenção mesmo, estou enrolada :(

Então... estou programando em ASP.. não funciona assim né :(

Ai.. qse estou chorando porque busca errado os dados do banco Access

Obrigadinha novamente

Editado por Marianne
Link para o comentário
Compartilhar em outros sites

  • 0

É sempre um prazer ajudar quem precisa!

Me desculpe pelos exemplos no SQL Server não sei porque cismei que estava utilizando SQL Server.

Normalmente é complicado suporte remoto pelo desconhecimento do ambiente como um todo.

E você têm razão pois as query do SQL nem sempre rodam no Access.

Para este problema seu fiz o seguinte teste no access:

SELECT [de] AS Expr1
    FROM Tabela1
    WHERE ((InStr(","+[Tabela1]![de]+"," ,",1,")>0));

Substitui o CHARINDEX (do SQL) pelo INSTR (Access) que localiza um determinado caracter em um string.

você deve concatenar , (virgulas) antes e depois do filtro ,1, para que o INSTR só retorne o 1, caos não faça isso retorna tab 11,12 e por ai.

Deu uma luz?

E relaxa que resolveremos esta parada!

Editado por jothaz
Link para o comentário
Compartilhar em outros sites

  • 0
É sempre um prazer ajudar quem precisa!

Me desculpe pelos exemplos no SQL Server não sei porque cismei que estava utilizando SQL Server.

Normalmente é complicado suporte remoto pelo desconhecimento do ambiente como um todo.

E você têm razão pois as query do SQL nem sempre rodam no Access.

Para este problema seu fiz o seguinte teste no access:

SELECT [de] AS Expr1
    FROM Tabela1
    WHERE ((InStr(","+[Tabela1]![de]+"," ,",1,")>0));

Substitui o CHARINDEX (do SQL) pelo INSTR (Access) que localiza um determinado caracter em um string.

você deve concatenar , (virgulas) antes e depois do filtro ,1, para que o INSTR só retorne o 1, caos não faça isso retorna tab 11,12 e por ai.

Deu uma luz?

E relaxa que resolveremos esta parada!

Oi Jotaz ! Obrigada pela antenção.

Então realmente funcionou dentro do ACCESS mas colocando no código não encontrei um meio de funcionar sem erro :(

Olhá só como estou chamando dentro do Código tentando pegar apenas os que possuem dentro do campo o "1":

SELECT CategoriaID AS IdContem FROM Loja WHERE (((InStr(","+CategoriaID +",",",1,"))>0))

Dei o nome de IdContem o campo o qual recuperaria os que possuem o 1 no campo

Erro:

Tipo de erro:

Microsoft VBScript compilation (0x800A0401)

Expected end of statement

categoria.asp, line 31, column 67

SqlCategView = "SELECT CategoriaID AS IdContem FROM Loja WHERE (((InStr(","+CategoriaID +",",",1,"))>0))"

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...