Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ESerra

[Resolvido] Subquery

Recommended Posts

Preciso entender porque o seguinte não funciona:

SELECT descricao FROM servicos WHERE id IN (SELECT servicos FROM geral WHERE id = '1')

 

Nesse caso, ele sempre retorna apenas uma linha como resultado, quando deveria retornar duas, a subquery:

SELECT servicos FROM geral WHERE id = '1'

 

Retorna exatamente: 1,3

 

Então, a minha idéia é que buscasse a coluna descricao da tabela serviços em que o id fosse igual a 1 e 3, mas não retorna, só retorna o primeiro, ou seja, o id igual a 1, se eu altero no BD e inverto (3,1) ele busca o do id igual a 3 e ignora o igual a 1, se eu jogo direto:

SELECT descricao FROM servicos WHERE id IN (1,3)

 

Retorna o resultado da forma correta, buscando os dois ids (1 e 3), não estou entendendo o porque disso, inclusive se eu faço duas querys, ou seja, primeiro:

 

SELECT servicos FROM geral WHERE id = '1'

 

Ai resgato os dado e uso esses mesmos dados na segunda:

SELECT descricao FROM servicos WHERE id IN ($dados_resgatados_da_primeira)

 

Também funciona perfeitamente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT servicos FROM geral WHERE id = '1'

Retorna duas linhas

 

servico
-------
1
3

ou uma string única

 

servico
-------
1,3

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez com a instr.

 

SELECT descricao FROM servicos WHERE instr((SELECT servicos FROM geral WHERE id = '1'),id) > 0

Obs : Puro chute.

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez com a instr.

 

SELECT descricao FROM servicos WHERE instr((SELECT servicos FROM geral WHERE id = '1'),id) > 0

Obs : Puro chute.

 

:)

 

Bingo! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

Funcionou certinho, não conhecia essa função, vou dar uma lida na documentação para assimilar ela bem, com certeza será útil.

 

Obrigado pela ajuda! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O perigo é um retorno tipo <2,3,11> e buscar um código <1> , vai ser um falso positivo.

 

Isto só funciona com códigos de tamanho especifico.

 

No Oracle vi e utilizei uma solução que tranforma a string numa tabela por meio de um CAST, talvez dê para fazer isto no MySql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, acabei de simular aqui e retornou um valor indevido... vou ter que buscar outra solução...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.