Ir ao conteúdo
  • Cadastre-se

INNER JOIN Dinâmico/Condicional


andersondanilo

Posts recomendados

Vou explicar a minha situação, eu tenho três tabelas, a primeira vai listar todos os pagamentos, esses pagamentos podem ser relativos a produtos ou mensalidades do serviço.

- Tabela Produto
id_produto
descricao
valor
qtd_parcelas

- Tabela Mensalidade
id_mensalidade
descricao
valor
qtd_mensalidades

- Tabela Pagamento
id_pagamento
tipo
id_tipo
valor

Na Tabela Pagamento, se o tipo for produto eu vou consultar a tabela Produto procurando id_tipo, porém se for uma mensalidade eu vou Consultar a tabela Mensalidade.

Alguém sabe se é possível fazer algo do tipo só com SQL?

Link para o comentário
Compartilhar em outros sites

anderson, é possível sim. Mas com quais colunas você relaciona a tabela de Pagamento com a Produto e Mensalidade?

Outra coisa, em termos de normalização, a tabela Produto e Mensalidade deveriam ser uma única tabela tendo uma coluna identificando se é produto ou mensalidade. Ex:

id_tabela (substituindo id_mensalidade e id_produto)

id_cobranca (se for mensalidade 1, se for produto 2)

descricao

valor

qtd

Desta forma você não precisaria fazer essa condicional.

Mas enfim, é só informar as colunas que cruzam entre elas que a gente monta o SELECT.

Link para o comentário
Compartilhar em outros sites

é tipo assim


- Tabela Produto
id_produto
descricao
valor
qtd_parcelas

- Tabela Mensalidade
id_mensalidade
descricao
valor
qtd_mensalidades

- Tabela Pagamento
id_pagamento
tipo => pode ser mensalidade ou produto
id_tipo => aponta para o id_produto ou para o id_mensalidade (de acordo com o tipo)
valor

Link para o comentário
Compartilhar em outros sites

Essa primeira query já te daria uma visão de tudo sem precisar fazer condicional ou o que for:

SELECT
*
FROM (SELECT
*
FROM tabela_pagamento
WHERE tipo = 'MENSALIDADE') PAG
JOIN tabela_mensalidade TM ON PAG.id_pagamento = TM.id_mensalidade
UNION
SELECT
*
FROM (SELECT
*
FROM tabela_pagamento
WHERE tipo = 'PRODUTO') PAG
JOIN tabela_produto TP ON PAG.id_pagamento = TP.id_produto

Essa segunda seria uma condicional como você queria, neste exemplo seu já fiz um esquema com a variável declarada, aí dependendo do que você colocar na váriavel (PRODUTO ou MENSALIDADE), ele fára uma query diferente:

DECLARE	@TIPO	VARCHAR(20)

SET @TIPO = ''

IF @TIPO = 'MENSALIDADE'
BEGIN

SELECT
*
FROM (SELECT
*
FROM tabela_pagamento
WHERE tipo = 'MENSALIDADE') PAG
JOIN tabela_mensalidade TM ON PAG.id_pagamento = TM.id_mensalidade

END


IF @TIPO = 'PRODUTO'
BEGIN

SELECT
*
FROM (SELECT
*
FROM tabela_pagamento
WHERE tipo = 'PRODUTO') PAG
JOIN tabela_produto TP ON PAG.id_pagamento = TP.id_produto

END

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...