使用指向同一个表的两个键创建视图?
还有一些类似的问题,但我不能从我们的问题推断解决方案,不幸的是他们。使用指向同一个表的两个键创建视图?
我有一个Train_Booking表和一个Train_Times表。我想创建一个视图,显示每个列车售票员的所有列车预订情况。不过,我的Train_Booking在其中有两个Train_Times引用:Train_Departure和Train_Arrival字段,它们持有指向Train_Times表的唯一外键。
我想创建像视图=
CREATE VIEW Train_Bookings_By_Conductor AS SELECT Train_Booking.Train_Booking_ID, Conductor.Conductor_Name, Train_Times.Train_Departure_Date, Train_Times.Train_Arrival_Date
FROM Train_Booking, Conductor, Train_Times
WHERE (Train_Booking.Conductor_ID = Conductor.Conductor_ID) AND (Train_Booking.Train_Outbound_Time_ID = Train_Times.Train_Time_ID)
我的问题是当然,该视图显示出发日期和到达日期作为相同的。添加以下内容只是打破查询
AND (Train_Booking.Train_Inbound_Time_ID = Train_Times.Train_Time_ID)
任何人都可以请说明在这种情况下做什么?如果我没有正确指出问题,请道歉,我会相应地重写它!由于
架构
你可以加入Train_Time表两次,而不是一次。想象一下,就好像你有两个Train_Times表副本。您加入一个入站,并加入另一个出站。实际上,你只有一个这样的表,但SQL允许你多次连接。每次,您都必须提供一个在您的查询中唯一的名称。假设我们使用“T1”和“T2”作为Train_Times表的名字(在我们的查询中)。
您加入Train_times,将其称为“T2”并使用入站字段进行加入。然后,我们再次加入;这次将其称为“T2”并使用连接中的出站字段。你将会得到如下结果:
SELECT Train_Booking.Train_Booking_ID
,T1.Train_Date as Arrival_Time
,T2.Train_Date as Departure_Date
FROM Train_Booking
JOIN Train_Times T1
on Train_Booking.Train_Inbound_Time_ID = T1.Train_Time_ID
JOIN Train_Times T2
on Train_Booking.Train_Outbound_Time_ID = T2.Train_Time_ID
既然你想引用Conductor,你也可以加入到它。完整的查询如下:
SELECT Train_Booking.Train_Booking_ID
,Conductor.Conductor_Name
,T1.Train_Date as Arrival_Time
,T2.Train_Date as Departure_Date
FROM Train_Booking
JOIN Conductor
on Train_Booking.Conductor_ID = Conductor.Conductor_ID
JOIN Train_Times T1
on Train_Booking.Train_Inbound_Time_ID = T1.Train_Time_ID
JOIN Train_Times T2
on Train_Booking.Train_Outbound_Time_ID = T2.Train_Time_ID
这种问题的一个有用的工具是SQlFiddle。而不是在问题中提供表格结构,你可以让它“活”。例如,以下是您的查询的实时示例:http://sqlfiddle.com/#!2/142a1/4
我已经添加了模式的问题,但我认为你的答案应该做的伎俩,生病的报告回来。 – user2395608 2014-09-03 18:33:47
不应该是“加入Train_Times AS InboundTime”吗? – HamHamJ 2014-09-03 18:36:05
我试图实现该解决方案,但它不会接受查询 - 你能解释一下这个语法吗? – user2395608 2014-09-03 19:48:31
那么,Train_Times包含(Train_Time_ID)和一个其他字段,或两个?看起来有两个?因此,outbound_time_ID和inbound_time_ID都与* pair *次数相关联,而不仅仅是一次? – 2014-09-03 18:15:51
你可以添加数据库模式吗? – HamHamJ 2014-09-03 18:17:39
Train_Times包含Train_Time_ID,Train_Date和Train_Time,但对于这个视图我只想要日期,谢谢。 – user2395608 2014-09-03 18:18:23