• 0
Sign in to follow this  
Steven Tyler

AND multiplo

Question

Oi pessoal,

Eu estou precisando fazer o seguinte.........

tenho uma tabela principal, onde tenho os campos

TBL CADASTROS

ds_codigo

ds_nome

e uma auxiliar

TBL SEGMENTO

ds_codigo FK

ds_codigo_segmento

No formulário de pesquisa do meu site, o usuário pode escolher mais de um segmento, os segmentos estão com checkbox no formulário.

eu preciso fazer com que só retornem registros que tem os segmentos escolhidos no formulário.

exemplo, eu tenho cadastrado o seguinte registro com 3 segmentos:

CADASTRO

ds_codigo ds_nome

1000 steven

SEGMENTOS

ds_codigo ds_codigo_segmento

1000 21

1000 22

1000 23

Eu preciso fazer uma query, eu cheguei até aqui:

SELECT * FROM cadastros c

LEFT JOIN segmentos s ON s.ds_codigo = c.ds_codigo

AND s.ds_codigo_segmento=21 AND s.ds_codigo_segmento=22 AND s.ds_codigo_segmento=23

isto está errado, pois nunca um registro será 21,22 e 23 ao mesmo tempo. ou a linha vem com 21, ou 22, ou 23.

Tentei usar IN

SELECT * FROM cadastros c

LEFT JOIN segmentos s ON s.ds_codigo = c.ds_codigo

AND s.ds_codigo_segmento IN (21,22,23)

Também não da certo, porque se o usuário no formulário escolher por exemplo o 21 e 22, e também escolher um 25, ele retorna as 2 linhas referentes ao 21 e 22, e eu QUERO QUE RETORNE LINHAS SOMENTE SE O USUÁRIO ESCOLHER SEGMENTO CORRETO.

Se o cadastro tem 21 22 e 23 de segmentos.......somente estes podem ser escolhidos, se escolher 21 22 e 25, ERRO !! não retorna nada...........se escolher 21 e 22, OK retorna............se escolher 21 22 e 23, OK retorna.........se escolher 21 e 25 ERRO !! não retorna !! Ou seja, apesar de 21 estar correto, o 25 não está, por isso não deve ter retorno !!

Entenderam? Eu preciso resolver isso com urgência !!!!

Obrigado

Steven Tyler

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Muito confuso vosso post.

Não tendendi bem o que queres, mas sou meio lerdo, então isso acontece. :o

Mas tenta troca o AND pelo OR:

SELECT * FROM cadastros c
LEFT JOIN segmentos s ON s.ds_codigo = c.ds_codigo AND 

s.ds_codigo_segmento=21 OR s.ds_codigo_segmento=22 OR s.ds_codigo_segmento=23

Outra sugestão é usa IN mas em um SQL dinamico e dar um EXEC.

Share this post


Link to post
Share on other sites
  • 0

Ta faltando o WHERE pois a condição de retorno não é ter 21 ou 22 ou 23.

Tenta assim

SELECT * FROM cadastros c
LEFT JOIN segmentos s ON s.ds_codigo = c.ds_codigo
WHERE
s.ds_codigo_segmento IN (21,22,23)

Edited by wamj

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this