Select em três tabelas

5 respostas
C

Olá pessoal!

Estou com um problemão…

Tenho três tabelas:

  • tb_cap: Contas à Pagar

    +id
    +nome_documento
    +data
    +valor

  • tb_banco_pag: Pagamento por Banco

    +nome_banco
    +num_agencia
    +data_pag
    +fk_tb_cap_id : chave estrangeira da tabela contas à pagar

  • tb_cheque: Pagamento por Cheque

    +num_cheque
    +emitente
    +data_pag
    +fk_tb_cap_id : chave estrangeira da tabela contas à pagar

Regras de negócio:

Cada documento pode ser pago ou por banco ou por cheque.

Problema:
Em ambas tabelas tb_cheque e tb_banco_pag existe o campo data_pag, em que não pode ser mudado, pois no relatório vai existir somente um data_pag, como disse só poder ser preenchido pela tabela tb_cheque ou tb_banco_pag.

Alguém pode me ajudar no select…

O select que fiz ele está duplicando os dados:

5 Respostas

H

Não entendi bem o que vc está querendo…

Vc quer selecionar as contas de sua tabela: " tb_cap: Contas à Pagar " que foram pagas, que forma pagas por banco ou por cheque?

mostra a query que vc fez …

H

Já ia me esquecendo, mais uma coisa qual banco vc está usando?

Oracle, Mysql, Sql Server…

C

O banco é MySQL.

Quero contas pagas por banco e por cheque…

Select distinct cap.docPag, cap.data, cap.credor, cap.pagamento, 
banco.data_pag, cap.valor
from tb_cap cap,tb_pag_banco banco, tb_cheque cheque
Where situacao="Pago" and MONTH(data)=MONTH(Curdate())
and ((banco.banco_cap=cap.id) or (cheque.cheque_cap=cap.id) )
M

vamos lá… vc está tendo registros duplicados pq nao há relacao de cheque com banco, logo para registo de conta ele repete o banco. No contas a pagar por banco e por cheque vc teria:

Bco xxxx
-chq 0001
–conta 1
–conta 2
-chq 0002
–conta 3
–conta 4

Bco yyyy
-chq 9999
–conta 5
–conta 6
-chq 8888
–conta 7
–conta 8

select
id
, nome_documento
, data
, valor
, num_cheque
, data_pag
, emitente
, nome_banco
, num_agencia

from tb_cap
inner join tb_cheque on
fk_tb_cap_id = id
and [chave do cheque] = [chave do banco]

group by
id
, nome_documento
, data
, valor
, num_cheque
, data_pag
, emitente
, nome_banco
, num_agencia

entendeu?

C

Problema Resolvido!

Criado 24 de agosto de 2006
Ultima resposta 30 de ago. de 2006
Respostas 5
Participantes 3