Fórum Dúvida: SQL multiplicando 2 tabelas, 1 delas com 2 FK da outra #403566

22/06/2011

0

Olá, a duvida é a seguinte:

Eu tenho 2 tabelas em um banco de dados Firebird, tabela USUARIO e MENSAGEM. Um usuario manda uma mensagem para N usuarios, então fica assim:

CREATE TABLE USUARIO (
    IDUSUARIO             INTEGER NOT NULL,
    NOME                  VARCHAR(50),
    EMAIL                 VARCHAR(50),
    LOGIN                 VARCHAR(20),
    SENHA                 VARCHAR(20)
)

CREATE TABLE MENSAGEM(
    CODIGO INTEGER NOT NULL,
    ASSUNTO VARCHAR(200),
    MSG VARCHAR(300),
    STATUS VARCHAR(15),
    REMETENTE INTEGER,
    DESTINATARIO INTEGER,
    PRIMARY KEY(CODIGO),
    FOREIGN KEY(REMETENTE) REFERENCES USUARIO(IDUSUARIO),
    FOREIGN KEY(DESTINATARIO) REFERENCES USUARIO(IDUSUARIO)
)



Então eu quero trazer os dados da multiplicação para popular uma espécie de "Caixa de Entrada". Como eu faço uma SQL para trazer os campos:

mensagem.codigo, mensagem.remetente,
mensagem.destinatario, mensagem.status, usuario.nome  (NOME DO REMETENTE),
usuario.nome  (NOME DO DESTINATARIO), mensagem.assunto, mensagem.msg

Eu fiz a seguinte SQL:

select mensagem.codigo codigomensagem, mensagem.remetente codigoremetente,
mensagem.destinatario codigodestinatario, mensagem.status status, usuario.nome nomeremetente,
usuario.nome nomedestinatario, mensagem.assunto assunto, mensagem.msg msg
from usuario, mensagem where mensagem.destinatario = usuario.idusuario and
usuario.idusuario = :p    

onde  :p vai ser passado por parâmetro, q é o codigo do usuario q recebeu a mensagem.

O problema é que os nomes que ele traz são do destinatário, e eu queria que um fosse do remetente e outro do destinatario, mas não sei como fazer.. se alguem souber e puder ajudar, fico grato.
Fernando Glizt

Fernando Glizt

Responder

Posts

22/06/2011

Wilson Junior

Teste assim:
SELECT
  mensag.Codigo AS CodigoMensagem, 
  mensag.Remetente AS CodigoRemetente,
  mensag.Destinatario AS CodigoDestinatario, 
  mensag.Status, 
  usur.Nome AS NomeRemetente,
  usud.Nome AS NomeDestinatario, 
  mensag.Assunto, 
  mensag.Msg
FROM 
  MENSAGEM mensag
    LEFT OUTER JOIN USUARIO usur ON (mensag.Remetente = usur.IdUsuario)
    LEFT OUTER JOIN USUARIO usud ON (mensag.Destinatario = usud.IdUsuario)
WHERE
  mensag.Destinatario = :p


Espero ter colaborado.
Responder

Gostei + 0

22/06/2011

Fernando Glizt

exatamente, muito obrigado, colaborou muito.
Responder

Gostei + 0

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

Aceitar