0

我得到了一个数据库,结构和数据值都是不可更改的,并且已经提供了一个问题。

生成查询以列出访问站点代码 101 的所有假期的假期代码、假期描述、假期持续时间和站点描述。您的答案不能假定站点代码 101 将始终具有相同的站点描述。

我对如何解决这个问题感到困惑。我尝试了多个连接,不同的点表示法,并在谷歌上搜索了这个问题并返回。有什么帮助吗?

表 1 - Holiday_Details

Holiday_Code - Country_Visited - Holiday_Duration - Holiday_Desc - Rating_Code - 成本

表 2 - Site_Of_Holiday

Site_Description - Site_Code

表 3 - Site_Visited

Holiday_Code - Site_Code

评论要求以前的尝试。这是我的第一次。

SELECT holiday_code, 
       holiday_desc, 
       holiday_duration site_of_holiday.Site_Name 
FROM   holiday_details 
       JOIN site_visited 
         ON holiday_code = site_visited.holiday_code 
       JOIN site_of_holiday 
         ON site_visited.site_code = site_of_holiday.site_code 
WHERE  site_of_holiday.site_code = 101; 
4

1 回答 1

1

为了将来参考,如果您发布有关失败尝试的更多详细信息,您将获得更好的回复。我的意思是代码。使用 SO 来解决你的家庭作业是不受欢迎的,但正如评论者所说,一旦你破坏了你的大脑,我们愿意提供帮助。

你看起来可能真的很努力,所以我会扔给你一根骨头......

导航多个表的技巧是找到匹配列的“对”。在这种情况下,您希望在表 Site_Of_Holiday(包含 Site_Description)和 Holiday_Details(包含其他所有内容)之间找到一条路径。

每对表之间匹配的列是:

  • 在 Site_Visited 和 Holiday_Details 中都可以找到 Holiday_Code
  • Site_Code 在 Site_Of_Holiday 和 Site_Visited 中都可以找到

这允许您在包含我们想要在输出中的所有列的表之间构建路径。在这种情况下,您将在这些匹配的列对中使用 INNER JOIN 来执行此操作。

连接表后,将结果想象成一个巨大的表,其列包括所有三个表中的所有列(以您在连接期间“命名”表的任何前缀)。现在您只需使用通常的 WHERE 子句过滤 Site_Code。

这是完整的示例 - 让我知道它是否适合您:

SELECT hd.Holiday_Code, hd.Holiday_Desc, hd.Holiday_Duration, soh.Site_Description
FROM Holiday_Details hd
INNER JOIN Site_Visited sv ON hd.Holiday_Code = sv.Holiday_Code
INNER JOIN Site_Of_Holiday soh ON sv.Site_Code = soh.Site_Code
WHERE sv.Site_Code = 101

祝你好运!

PS如果任何美国人得到类似的任务,这里是翻译;-)

SELECT vd.Vacation_Code, vd.Vacation_Desc, vd.Vacation_Duration, sov.Site_Description
FROM Vacation_Details vd
INNER JOIN Site_Visited sv ON vd.Vacation_Code = sv.Vacation_Code
INNER JOIN Site_Of_Vacation sov ON sv.Site_Code = sov.Site_Code
WHERE sv.Site_Code = 101
于 2012-11-27T19:10:55.943 回答