SQL - Junção de mais de um campo em tabelas com a mesma origem

30/01/2010

2


Se eu tiver as seguintes tabelas

Pessoas  (pk_pessoa, nome)
Tarefas  (pk_tarefa, fk_solicitante, fk_destinatario, descricao)

Gostaria de fazer uma consulta que substituisse os campos fk_solicitante e fk_destinatario pelos correspondentes na tabela Pessoas.

Se fosse só uma coluna era fácil, seria

SELECT * from Pessoas, Tarefas where Tarefas.fk_solicitante = Pessoas.pk_pessoa

ou

SELECT * from Pessoas INNER JOIN Tarefas ON Tarefas.fk_solicitante = Pessoas.pk_pessoa


Só que como tenho duas colunas, como é que poderia fazer isso? Tentei joins aninhados, mas não deu certo. Alguém sabe como poderia fazer isso?

Se tivesse os seguintes conteúdos:

Pessoas

+-----------+---------+
| pk_pessoa |  nome   |
+-----------+---------+
|     1     |  João   |
|     2     |  José   |
|     3     |  Maria  |
+-----------+---------+


Tarefas

+-----------+----------------+-----------------+---------------+
| pk_tarefa | fk_solicitante | fk_destinatario | descricao     |
+-----------+----------------+-----------------+---------------+
|     1     |       1        |        3        |  Tarefa 1     |
|     2     |       1        |        2        |  Tarefa 2     |
|     3     |       2        |        3        |  Tarefa 3     |
+-----------+----------------+-----------------+---------------+


O resultado desejado seria:

+-----------+--------------+--------------+---------------+
| pk_tarefa | solicitante  | destinatario | descricao     |
+-----------+--------------+--------------+---------------+
|     1     |  João        |   Maria      |  Tarefa 1     |
|     2     |  João        |   Maria      |  Tarefa 2     |
|     3     |  José        |   José       |  Tarefa 3     |
+-----------+--------------+--------------+---------------+


Com a solução trivial consegui fazer a substituição de uma das colunas, mas
como teria que fazer para substituir as duas, solicitante e destinatário?







Responder

Posts

30/01/2010

Mauricio Lima


Acabei conseguindo, mas não sei se essa é a melhor solução. Consegui duplicando a tabela de Pessoas na consulta. Fiz assim:

SELECT
             pk_tarefa, P1.nome as solicitante, P2.nome as destinatario, Tarefas.descricao as descricao
FROM
             Tarefas, Pessoas as P1, Pessoas as P2
WHERE
             Tarefas.pk_solicitante = P1.pk_pessoa AND Tarefas.pk_solicitante = P2.pk_pessoa



Seria essa a solução mais elegante e eficiente ou teria uma melhor??



Responder

03/02/2010

Wilson Junior

Segue a melhor maneira de ser feita. Pois colocando JOIN, a pesquisa é mais rápida.

SELECT
  tar.pk_tarefa,
  p1.Nome AS Solicitante,
  p2.Nome AS Destinatario,
  tar.Descricao
FROM
  TAREFAS tar
    INNER JOIN PESSOAS p1 ON ( tar.fk_solicitante = p1.pk_pessoa )
    INNER JOIN PESSOAS p2 ON ( tar.fk_destinatario = p2.pk_pessoa )

Espero ter colaborado.
Responder

16/05/2013

José

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar