SQL - 我可以在同一列上再次重复内连接吗?

时间:2013-11-30 20:18:45

标签: mysql sql join inner-join

我有两个简单的表,一个名为itineraries,其中包含假日行程的详细信息,另一个名为users,其中包含用户的详细信息。其他用户创建行程,用户可以复制他们的行程并添加旅行社,因此copied_from_id是来自users.id的原始创建用户的ID。

我已使用以下查询加入itineraries.user_idusers.id 完美运作

SELECT 
itineraries.travel_agent_id, 
itineraries.copied_from_id,
itineraries.user_id,
users.full_name,
users.username

FROM `gadabouting_gadabouting_production`.`itineraries`

INNER JOIN `gadabouting_gadabouting_production`.`users` ON itineraries.user_id=users.id

WHERE itineraries.travel_agent_id='253' 

给我以下输出:

+-----------------+------------------+---------+-------------+-------------+
| travel_agent_id | original_creator | user_id | full_name   | username    |
| 253             | 501              | 1465    | John Smithy | j.smithy    |
| 253             | 501              | 1465    | John Smithy | j.smithy    |
| 253             | 501              | 1474    | Ben Stockes | ben.stockes |
+-----------------+------------------+---------+-------------+-------------+

travel_agent_idoriginal_creator列与users.id相同。

我现在要做的是将itineraries.travel_agent_iditineraries.original creator映射到users.full_nameusers.username列(因此请full_name和{{1每个usernametravel_agent_id列旁边都打印了一些列,但我无法弄清楚如何做到这一点。我现在花了几个小时就完成了它,无法理解我的想法围绕它。我需要做更多的连接吗?

我已经查看了其他几个关于多个连接的SO问题,但据我所知,它们都没有覆盖在同一列上“一次又一次”的“回复”的过程我想在这里做。

这可能吗?非常感谢任何帮助!

由于

1 个答案:

答案 0 :(得分:0)

您可以反复加入同一个表,但是您需要为每个表使用别名,以便您可以指定要使用的别名。如果按名称访问结果,则还需要删除某些字段名称。

(在其他表上使用别名也很方便,使查询更简洁。)

select
  i.travel_agent_id, 
  i.copied_from_id,
  i.user_id,
  u.full_name,
  u.username,
  ut.full_name as travel_agent_full_name,
  ut.username as travel_agent_username,
  uc.full_name as creator_full_name,
  uc.username as creator_username
from
  gadabouting_gadabouting_production.itineraries as i
  inner join gadabouting_gadabouting_production.users as u on u.id = i.user_id
  inner join gadabouting_gadabouting_production.users as ut on u.id = i.travel_agent_id
  inner join gadabouting_gadabouting_production.users as uc on u.id = i.original_creator
where
  i.travel_agent_id = '253'