【问题标题】:SQL can't get the accurate data [closed]SQL 无法获得准确的数据 [关闭]
【发布时间】:2017-11-21 06:28:06
【问题描述】:

在 SQL 中获取数据时遇到问题。如何有一个表源或主键但有两个不同的外键。

This is the ERD This is the result but when i put the Departure it will be vice versa

【问题讨论】:

  • 完全不清楚你在问什么。请编辑您的问题,并显示示例输入、输出以及屏幕截图中的查询。
  • 请查看此链接(spaghettidba.com/2015/04/24/…) 了解更多关于如何提出/改进您的问题
  • 您可以在查询中添加任意数量的联接。如果您想要来自三个表的数据,那么您至少需要两个连接。对连接进行一些适当的研究,然后,如果您仍然需要帮助,请提供问题的完整且清晰的描述。
  • @TimBiegeleisen 图片已经注明,点击标题

标签: sql sql-server vb.net erd


【解决方案1】:

如果我正确理解了您的问题,您似乎正试图从同一个联接中获取“出发”和“到达”值。为了使其工作,您需要为“Departure”和“Arrival”中的每一个设置两个从 Routes 到 Airports 的单独连接(并相应地别名)。

select date, 
    time, 
    ArrivalAirport.IATACode as Departure,
    DepartureAirport.IATACode as Arrival,
    FlightNumber,
    Aircrafts.Name,
    EconomyPrice,
    Schedules.ID
from Schedules
inner join [Routes] on Schedules.RouteID = [Routes].ID
inner join Aircrafts on Schedules.AircraftID = Aircrafts.ID
inner join Airports as ArrivalAirport on ArrivalAirport.ID = [Routes].ArrivalAirportID
inner join Airports as DepartureAirport on DepartureAirport.ID = [Routes].DepartureAirportID

请注意,“机场”连接的两个实例需要相应地为它们设置别名,以便您可以在选择投影中执行您需要的操作。

【讨论】:

  • 所有列引用都应该有它们的表名或表别名(如果已定义别名)
  • @PEBKAC 它说“找不到多部分标识符‘Airports.ID’”
  • @Christian Lumugdan ... 更正了连接。再试一次。
【解决方案2】:

您需要为使用两次的表使用表别名,然后加入两次。

SELECT Routes.ID, DEP.IATACode, ARR.IATACode
FROM dbo.Routes
INNER JOIN dbo.Airports AS DEP ON DEP.ID = Routes.DepartureAirportID
INNER JOIN dbo.Airports AS ARR ON ARR.ID = Routes.ArrivalAirportID

一旦定义,您就可以在查询中的任何地方使用别名。见here for more on using an alias

【讨论】:

  • 非常感谢,我将它应用到了日程表中,它可以工作了!圣诞快乐
【解决方案3】:

这就是我认为您正在寻找的东西:

SELECT
    Schedules.Date,
    Schedules.Time,
    DepartureAirport.IATACode AS Departure,
    ArrivalAirport.IATACode AS Arrival,
    Schedules.FlightNumber,
    Aircrafts.Name,
    Schedules.EconomyPrice,
    Schedules.ID
FROM
    Schedules
    INNER JOIN Aircrafts ON Schedules.AircraftID = Aircrafts.ID
    INNER JOIN Routes ON Schedules.RouteID = Routes.ID
    INNER JOIN Airports AS DepartureAirport 
            ON Routes.DepartureAirportID = DepartureAirport.ID
    INNER JOIN Airports AS ArrivalAirport
            ON Routes.ArrivalAirportID = DepartureAirport.ID

问题是在 Airports 表上有两个单独的连接,这样您就可以拥有两个不同的机场。否则你的航班会很短,乘客也会很不满意。

【讨论】:

  • 我会试试这个
  • 无数据结果。
  • 无数据结果。
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多