GARANTIR DESCONTO

Fórum Dúvida com select retornando valores diferentes na tabela #477524

29/04/2014

0

Boa tarde!

Tenho duas tabelas conforme segue:

Tabela 1.

Poduto_id, Categoria_id, e várias oiutras que não vem ao caso neste momento.

Tenho nesta base.

Produto_id Categoria_id
1 15
2 16
3 17
4 18
5 19


Tabela 2.
Categoria2_id, subcategoria_id, e várias oiutras que não vem ao caso neste momento.
Tenho nesta base.

Categoria2_id subCategoria_id
15 0
16 0
17 15
18 15
19 0

Estou tentando e não consigo:

Selct Produto_id fron 1,2 where Categoria_id=Categoria2_id and Categoria_id=subCategoria_id

o resultado deveria ser:
1
3
4

Alguém pode me ajudar nesta?

Grato,
João Freitas

João Freitas

Responder

Posts

29/04/2014

Alex Lekao

Oi Joao, boa tarde!!

O que vc precisa que seja apresentado eh apenas os items que a categoria_id seja igual ao categoria 2 e subcategoria ao mesmo tempo?

Pelo que entendi no seu script seria isso que vai acontecer baseado o exemplo que vc citou.

Vc precisa do que especificamente? acredito que com um pouco mais de informacoes consigamos te ajudar.

Abraco.

Alex - Lekao
Responder

Gostei + 0

29/04/2014

João Freitas

Alex,

Obrigado pela rápida resposta.

É isso mesmo que desejo.

Os códigos Poduto_id da tabela 1 devem ser exibidos quando as Categoria2_id subCategoria_id da tabela 2 forem iguais a Categoria_id da tabela 1
Neste exempo:

O resultado para Produto_id deveria ser:
1
3
4
Responder

Gostei + 0

29/04/2014

Alex Lekao

Oi Joao,

Entao pelo seu script a coluna da primeira tabela tem que ser igual ao mesmo tempo a duas colunas na segunda tabela, desta forma o seu script provavelmente esta retornando nenhuma informacao.

Eu sugeriria vc eliminar o segundo and, ou substituir o and por or, se o or lhe trouxer o resultado esperado.

Nesse caso entra uma questao meio chatinha de logica matematica que honestamente me confunde muito e, eu particularmente, tenho que gastar gastante tempo em cima analisando para definir o resultado. rsrsr

Espero que ajude.

Abraco.

Alex - Lekao
Responder

Gostei + 0

29/04/2014

João Freitas

Não funciona com and/or.

Alguém pode nos ajudar?
Responder

Gostei + 0

29/04/2014

Alex Lekao

vc experimentou tirar essa parte do select?


and Categoria_id=subCategoria_id


Com or o seu script ficou assim?

Selct 
   Produto_id 
fron 1,2 
where    Categoria_id=Categoria2_id 
   or Categoria_id=subCategoria_id


nao deu o resultado que vc queria?
Responder

Gostei + 0

29/04/2014

João Freitas

Não funciona.
Responder

Gostei + 0

29/04/2014

Alex Lekao

trouxe algum resultado?
Responder

Gostei + 0

29/04/2014

João Freitas

Nada em branco na tela
Responder

Gostei + 0

02/05/2014

William

João, olha só que interessante, instruções SQL também envolvem lógica !!!

Vou tentar explicar o que está ocorrendo com o seu SQL, mas o melhor seria escrevendo em um quadro mesmo:

Se utilizarmos o operador 'AND' na instrução:
SELECT t1.Produto_id FROM Tabela1 t1, Tabela2 t2 
WHERE t1.Categoria_id = t2.Categoria2_id AND t1.Categoria_id = t2.subCategoria_id


Explicação: as instruções SELECT são analisadas por linha da tabela, acima estou pedindo para ser exibido o Produto_id quando no mesmo registro (MESMA LINHA) da Tabela2 os campos Categoria_id FOR IGUAL Categoria2_id E Categoria_id FOR IGUAL subCategoria_id, ou seja, na mesma linha tem que ser verdadeira a comparação nos 2 campos, seguindo o seu raciocínio não existem resultados verdadeiros em ambos os campos, por isso o resultado em branco:
Produto_id Categoria_id
1 15
2 16
3 17
4 18
5 19


Categoria2_id subCategoria_id
15 0
16 0
17 15
18 15
19 0

Se utilizarmos o operador 'OR' na instrução:
SELECT t1.Produto_id FROM Tabela1 t1, Tabela2 t2 
WHERE t1.Categoria_id = t2.Categoria2_id OR t1.Categoria_id = t2.subCategoria_id


Explicação: Agora estou pedindo para exibir o Produto_id quando no mesmo registro (MESMA LINHA) da Tabela2 os campos Categoria_id FOR IGUAL Categoria2_id OU Categoria_id FOR IGUAL subCategoria_id, ou seja, a condição pode ser verdadeira para primeira comparação e falsa para segunda ou vice e versa que mesmo assim será retornado todas as combinações possíveis, observe o resultado abaixo:
Resultado:
1
2
1
3
1
4
5

De acordo com o raciocínio acima o resultado que você espera é impossível de trazer (1,3,4) seja usando AND ou OR, pois não existem combinações para isso!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar