Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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...
Uma string única: 1,3.
Talvez com a instr.
SELECT descricao FROM servicos WHERE instr((SELECT servicos FROM geral WHERE id = '1'),id) > 0
Obs : Puro chute.
:)
>
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
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.
Realmente, acabei de simular aqui e retornou um valor indevido... vou ter que buscar outra solução...
SELECT servicos FROM geral WHERE id = '1'
Retorna duas linhas
servico
-------
1
3
ou uma string única
servico
-------
1,3
?