Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

Leudassdf

[Resolvido] IF num select

Mensagens Recomendadas

Leudassdf    6
Leudassdf

Boas pessoal,

eu tenho a seguinte instrução:

SELECT produto.cod_produto, produto.Titulo, produto.Descricao, produto.preco, produto.Quantidade, produto.Unidade_Venda, produto.Biologico,

produto.Quantidade_minima_venda, produto.cod_categoria, Favoritos.gosta_s_n AS favorito

FROM produto INNER JOIN

Favoritos ON produto.cod_produto = Favoritos.cod_produto AND Favoritos.username = 'test'

O que eu desejo fazer é transformar o valor que me é devolvido pelo favoritos.gosta_s_n.Este campo só devolve 0 ou 1. Se ele devolver 0 quero transformar para 1 se devolver 1 quero transformar para 0.

Alguém sabe como posso fazer esta transformação através desta instrução?

Cumprimentos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rechousa    63
Rechousa

Olá,

Com SQL Server 2012 podes usar a função IIF.

Com versões anteriores podes usar CASE, assim:

SELECT		produto.cod_produto, produto.Titulo, produto.Descricao, produto.preco, produto.Quantidade, produto.Unidade_Venda, produto.Biologico,
					 produto.Quantidade_minima_venda, produto.cod_categoria, CASE Favoritos.gosta_s_n WHEN 1 THEN 0 ELSE 1 END AS favorito
FROM			produto INNER JOIN
					 Favoritos ON produto.cod_produto = Favoritos.cod_produto AND Favoritos.username = 'test'

Espero ter ajudado,

Editado por Rechousa

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Leudassdf    6
Leudassdf

Olá,

Com SQL Server 2012 podes usar a função IIF.

Com versões anteriores podes usar CASE, assim:

SELECT		produto.cod_produto, produto.Titulo, produto.Descricao, produto.preco, produto.Quantidade, produto.Unidade_Venda, produto.Biologico,
					 produto.Quantidade_minima_venda, produto.cod_categoria, CASE Favoritos.gosta_s_n WHEN 1 THEN 0 ELSE 1 END AS favorito
FROM			produto INNER JOIN
					 Favoritos ON produto.cod_produto = Favoritos.cod_produto AND Favoritos.username = 'test'

Espero ter ajudado,

Perfeito.

Muito obrigado.

Cumprimentos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Leudassdf    6
Leudassdf

Olá,

Com SQL Server 2012 podes usar a função IIF.

Com versões anteriores podes usar CASE, assim:

SELECT		produto.cod_produto, produto.Titulo, produto.Descricao, produto.preco, produto.Quantidade, produto.Unidade_Venda, produto.Biologico,
					 produto.Quantidade_minima_venda, produto.cod_categoria, CASE Favoritos.gosta_s_n WHEN 1 THEN 0 ELSE 1 END AS favorito
FROM			produto INNER JOIN
					 Favoritos ON produto.cod_produto = Favoritos.cod_produto AND Favoritos.username = 'test'

Espero ter ajudado,

Só mais uma pergunta,

a instrução acima funciona na perfeiçao quando na tabela favoritos existe lá um valor correspondente ao username. Mas quando eu nao tenho nenhum registo nessa tabela a instrução nao devolve nada.

No entanto o que eu queria fazer era que quando não houve-se nada nessa tabela para x utilizador a instruçao devolve-se na mesma o produto e a "variavel" favorito devolve-se 0.

Isto é possivel?

O objectivo é devolver sempre todos os produtos que estao na tabela produto. No entanto tambem deve devolver na "variavel" favorito o valor 0 caso na tabela favoritos nao haja registo de informação para esse produto e para x utilizador.

Cumprimentos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rechousa    63
Rechousa

Olá,

Pelo que percebi, tens de trocar o INNER JOIN pelo LEFT JOIN e terás de testar se o valor do campo gost_s_n é nulo ou não, é isso?

Assim:

SELECT produto.cod_produto, produto.Titulo, produto.Descricao, produto.preco, produto.Quantidade, produto.Unidade_Venda, produto.Biologico, produto.Quantidade_minima_venda, produto.cod_categoria, CASE COALESCE(Favoritos.gosta_s_n, 1) WHEN 1 THEN 0 ELSE 1 END AS favorito
FROM produto
   LEFT JOIN Favoritos ON produto.cod_produto = Favoritos.cod_produto AND Favoritos.username = 'test'

É isto?


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Leudassdf    6
Leudassdf

Olá,

Pelo que percebi, tens de trocar o INNER JOIN pelo LEFT JOIN e terás de testar se o valor do campo gost_s_n é nulo ou não, é isso?

Assim:

SELECT produto.cod_produto, produto.Titulo, produto.Descricao, produto.preco, produto.Quantidade, produto.Unidade_Venda, produto.Biologico, produto.Quantidade_minima_venda, produto.cod_categoria, CASE COALESCE(Favoritos.gosta_s_n, 1) WHEN 1 THEN 0 ELSE 1 END AS favorito
FROM produto
LEFT JOIN Favoritos ON produto.cod_produto = Favoritos.cod_produto AND Favoritos.username = 'test'

É isto?

Infelizmente não percebo muito dos left e dos right joins. No entanto o objectivo era devolver sempre um valor para a variável favoritos mesmo que na tabela favoritos.username nao se encontrassem valores para aquele cod_produto ou utilizador.

No entanto esta instrução permitiu-me chegar a solução.

Ficou assim:

SELECT produto.cod_produto, produto.Titulo, produto.Descricao, produto.preco, produto.Quantidade, produto.Unidade_Venda, produto.Biologico,

produto.Quantidade_minima_venda, produto.cod_categoria, CASE (favoritos.gosta_s_n) WHEN 1 THEN 0 ELSE 1 END AS favorito

FROM produto LEFT OUTER JOIN

favoritos ON produto.cod_produto = favoritos.cod_produto AND favoritos.username = 'teste'

Seria possível explicar-me o que faz o left join e o right join? Já estive a ver em alguns sites mas infelizmente nao consigo perceber o que fazem.

Cumprimentos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rechousa    63
Rechousa

Olá,

Claro que sim!

Em primeiro lugar, antes de "falarmos" sobre LEFT ou RIGHT join, vamos "falar" de INNER JOIN.

Vamos assumir este exemplo:

SELECT * FROM produto
INNER JOIN favoritos ON produto.cod_produto = favoritos.cod_produto

Quando pretendes relacionar duas tabelas (tabela Produto e tabela Favoritos) tens de ter algum campo que as ligue, neste caso, o campo é cod_produto.

O INNER JOIN permite-te selecionar todos registos da tabela da esquerda (Produto) que existem na tabela da direita (Favoritos), ou seja, lista-te aqueles registos que existem em ambas as tabelas.

O LEFT JOIN permite-te selecionar todos os registos da tabela da esquerda (Produto) quer existam ou não na tabela da direita (Favoritos).

Se existirem na tabela da direita, os campos referentes a Favoritos irão aparecer preenchidos.

Se não existirem os campos vão aparecer a NULL.

O RIGHT JOIN é semelhante ao LEFT JOIN, porém permite-te selecionar todos os registos da tabela da direita (Favoritos) quer existam ou não na tabela da esquerda (Produtos).

Se existirem na tabela da esquerda, os campos referentes a Produtos irão aparecer preenchidos.

Se não existirem os campos vão aparecer a NULL.

Espero ter ajudado,


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Leudassdf    6
Leudassdf

Olá,

Claro que sim!

Em primeiro lugar, antes de "falarmos" sobre LEFT ou RIGHT join, vamos "falar" de INNER JOIN.

Vamos assumir este exemplo:

SELECT * FROM produto
INNER JOIN favoritos ON produto.cod_produto = favoritos.cod_produto

Quando pretendes relacionar duas tabelas (tabela Produto e tabela Favoritos) tens de ter algum campo que as ligue, neste caso, o campo é cod_produto.

O INNER JOIN permite-te selecionar todos registos da tabela da esquerda (Produto) que existem na tabela da direita (Favoritos), ou seja, lista-te aqueles registos que existem em ambas as tabelas.

O LEFT JOIN permite-te selecionar todos os registos da tabela da esquerda (Produto) quer existam ou não na tabela da direita (Favoritos).

Se existirem na tabela da direita, os campos referentes a Favoritos irão aparecer preenchidos.

Se não existirem os campos vão aparecer a NULL.

O RIGHT JOIN é semelhante ao LEFT JOIN, porém permite-te selecionar todos os registos da tabela da direita (Favoritos) quer existam ou não na tabela da esquerda (Produtos).

Se existirem na tabela da esquerda, os campos referentes a Produtos irão aparecer preenchidos.

Se não existirem os campos vão aparecer a NULL.

Espero ter ajudado,

ola,

Ajudou em muito, agora já percebi o que é que cada um faz.

Muito obrigada

Cumprimentos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.