【问题标题】:Joining two indirectly related tables without including columns from tables in between连接两个间接相关的表,而不包括中间表中的列
【发布时间】:2020-09-22 10:14:48
【问题描述】:

基于以下 ERD,我正在尝试编写一个查询,显示客户直接进行的预订,包括预订 ID、预订日期、客户 ID、客户名字、旅行 ID、旅行类别名称、旅行日期

我已经能够在查询中包含除旅游类别名称之外的所有内容,因为 TOUR_SITES 表在路上。有没有一种方法可以在不添加任何额外列的情况下加入 TOUR_PACKAGE 表中的类别名称?

  SELECT  r.RESERVATION_ID, r.RESERVATION_DATE, 
c.CUSTOMER_ID, c.FIRST_NAME,t.TRIP_ID, o.TRIP_DATE/*, P.CATEGORY_NAME*/

FROM CUSTOMER c 
INNER JOIN RESERVATION r
ON
r.CUSTOMER_ID=c.CUSTOMER_ID

INNER JOIN TOURTRIP_RESERVATION t
ON
r.RESERVATION_ID=t.RESERVATION_ID

INNER JOIN TOUR_TRIP O
ON
t.TRIP_ID=o.TRIP_ID


WHERE AGENT_ID IS NULL;

【问题讨论】:

    标签: sql oracle join select


    【解决方案1】:

    您需要先在 TOUR_SITEID 上加入 tour_sites 和 tour_trip,然后在 category_id 上加入 tour_package 和 tour_sites 以获得旅游类别名称。您可以在 tour_sites 上加入 left join,以防没有为像新添加的 tour_trip 这样的旅游分配的旅游站点。

    SELECT  r.RESERVATION_ID, r.RESERVATION_DATE, c.CUSTOMER_ID, c.FIRST_NAME,t.TRIP_ID, o.TRIP_DATE,TP.CATEGORY_NAME
    FROM CUSTOMER c 
    INNER JOIN RESERVATION r ON r.CUSTOMER_ID=c.CUSTOMER_ID
    INNER JOIN TOURTRIP_RESERVATION t ON r.RESERVATION_ID=t.RESERVATION_ID
    INNER JOIN TOUR_TRIP O ON t.TRIP_ID=o.TRIP_ID
    LEFT JOIN TOUR_SITES TS ON TS.TOUR_SITEID =  O.TOUR_SITEID
    INNER JOIN TOUR_PACKAGE TP ON TP.CATEGORY_ID = TS.CATEGORY_ID 
    WHERE AGENT_ID IS NULL;
    

    【讨论】:

      【解决方案2】:

      有没有一种方法可以在不添加任何额外列的情况下从 TOUR_PACKAGE 表中加入类别名称?

      当然;只需加入您需要的所有表格。您不必在select 列列表中添加其他列(您不需要的列),但无论如何您都必须使用tour_sites 表。

      类似这样的:

      select  r.reservation_id, r.reservation_date, 
        c.customer_id, c.first_name,t.trip_id, o.trip_date,
        p.category_name
      from customer c inner join reservation r on r.customer_id=c.customer_id
      inner join tourtrip_reservation t on r.reservation_id=t.reservation_id
      inner join tour_trip o on t.trip_id=o.trip_id
      --
      join tour_sites s on s.tour_siteid = o.tour_siteid       --> add 
      join tour_package p on p.category_id = s.category_id     --> this
      where agent_id is null;
      

      【讨论】:

      • 完美。非常感谢您的及时解决!
      猜你喜欢
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2016-06-17
      • 2014-11-13
      • 1970-01-01
      • 2012-09-25
      相关资源
      最近更新 更多