【问题标题】:SQL - can I do repeated inner joins again on the same column?SQL - 我可以在同一列上再次进行重复的内部连接吗?
【发布时间】:2013-11-30 20:18:44
【问题描述】:

我有两张简单的表格,一张名为itineraries 包含假期行程的详细信息,另一张名为users 包含用户的详细信息。其他用户创建行程,用户可以复制自己的行程并添加旅行社,所以copy_from_id是来自users.id的原始创建用户的ID。

我已使用以下查询将itineraries.user_id 加入users.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_nameusername 列打印在每个travel_agent_id 旁边和original_creator 列,但我就是不知道该怎么做。我已经花了好几个小时在上面,但无法理解它。我需要做更多的连接吗?

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

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

谢谢

【问题讨论】:

  • 需要每个实体/关系有一个单独的连接。像 SQL Server 这样的一些系统有 CTE,但它们用于递归查询,而不仅仅是希望加入多个关系的查询。

标签: mysql sql join inner-join


【解决方案1】:

您可以一遍又一遍地加入同一个表,但您需要为每个表使用一个别名,以便您可以指定要使用哪个表。如果您通过名称访问结果,您还需要为某些字段名称提供 alases。

(也可以在其他表上使用别名,以使查询不那么冗长。)

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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 2018-01-07
    • 1970-01-01
    • 2018-07-10
    相关资源
    最近更新 更多