sql—连接两个间接相关的表,而不包括中间表中的列

ufj5ltwl  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(429)

基于下面的erd,我尝试编写一个查询,显示客户直接预订的情况,包括预订id、预订日期、客户id、客户名字、旅行id、旅游类别名称、旅行日期

我已经能够在我的查询中包括除旅游类别名称之外的所有内容,因为tour\u sites表挡住了我的去路。有没有一种方法可以在不添加任何额外列的情况下从tour\u 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;
n3schb8v

n3schb8v1#

有没有一种方法可以在不添加任何额外列的情况下从tour\u package表中连接类别名称?
当然;只要把你需要的表都连接起来。您不必将其他列(您不需要的列)添加到 select 列列表,但必须使用 tour_sites 反正是table。
像这样:

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;
cmssoen2

cmssoen22#

您需要先使用tour\u siteid上的tour\u trip加入tour\u站点,然后使用category\u id上的tour\u sites加入tour\u package才能获得tour category\u名称。如果没有像新添加的旅游线路那样为旅游线路分配旅游线路,您可以加入旅游线路站点的左连接。

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;

相关问题