1

问候并感谢您阅读我的问题。

首先,下图描述了我正在创建的数据库的一部分。我的目标(除非有更好的方法可以做到这一点)是支持多种语言的字段,这些字段通常在单独的表中称为“schedule_name”和“schedule_description”。PS - 我知道此图中的列类型标记得很糟糕。

数据库

如您所见,boat, Cruise 和 schedule 都有一个 languageid 作为外键。如果我想提取游轮和船的时间表记录,请问我该怎么做?

我的表加入没问题,列别名已排序,但想在每个别名中获取正确的详细信息。为了清楚起见

时间表有它自己的 language_language_id 参考来选择使用 language_id = 1 language_name_en 是 - 星期一早上

Cruise 有自己的 language_language_id 参考,可以使用 language_id = 2 language_name_en 进行选择 - Sunny Haze

船有它自己的 language_language_id 参考来挑选使用 language_id = 3 language_name_en is - Blue Dolphin

回答对此问题的评论;en 是英文,zhs 是简体中文,zht 是繁体中文。这些是该系统支持动态数据的语言。我认为这样布置表格会很方便,这样可以有一个只负责处理语言的用户类型;无需处理调度表。

到目前为止,我相信我的查询将按如下方式获得示例记录,如下所示:

SELECT 
   schedule_id,
   s.language_name_en as schedule_name_en,
   l.language_name_zhs as schedule_name_zhs,
   l.language_name_zht as schedule_name_zht,
   schedulesafename,
   schedule_expected_arrival,
   schedule_expected_departure,
   cruise_id,
   c.language_name_en as cruise_name_en,
   c.language_name_zhs as cruise_name_zhs,
   c.language_name_zht as cruise_name_zht 
   FROM
      schedule as s 
   INNER JOIN
      language as l 
         ON s.language_language_id = l.language_id
   INNER JOIN
      cruise as c
         ON c.language_language_id = l.language_id
   Where
      schedule_id = 1;

这是我希望使用列出的查询返回的一些示例数据。

scheduleid - 1
schedule_name_en - monday morning
schedule_name_zhs - 星期一的早晨
schedule_name_zht - 星期一的早晨
schedule_safename - pwupglfkpmwcbkgzhmzxrqfeqzlhvaed 
schedule_expected_arrival - 1353138308
schedule_expected_departure - 1353139218
cruise_id - 1 
cruise_name_en - Sunny Haze
cruise_name_zhs - 彩霞
cruise_name_zht - 彩霞
cruise_safename - bbhdrunzdmftyvhprefvogysgfrtnkgm 

这让您了解我希望如何从数据库中获取数据。我的主要问题是如何在同一个查询中删除语言记录。感谢您阅读我的问题。

4

1 回答 1

4

我认为您非常接近,您只需要为相应的表重新使用具有不同别名的相同语言表......就像

SELECT 
      S.schedule_id,
      SL.language_name_en as schedule_name_en,
      SL.language_name_zhs as schedule_name_zhs,
      SL.language_name_zht as schedule_name_zht,
      schedulesafename,
      S.schedule_expected_arrival,
      S.schedule_expected_departure,
      C.cruise_id,
      CL.language_name_en as cruise_name_en,
      CL.language_name_zhs as cruise_name_zhs,
      CL.language_name_zht as cruise_name_zht 
   FROM
      schedule as s 
         INNER JOIN language as SL 
            ON s.language_language_id = SL.language_id
         INNER JOIN cruise as c
            on s.Cruise_Cruise_ID = c.Cruise_Id
            INNER JOIN language as CL 
               ON c.language_language_id = CL.language_id
   Where
      S.schedule_id = 1;

首先请注意,Schedule(别名 S)在 schedules language ID join 上加入了语言(第一次被别名为 Schedule Language 的“SL”)。

接下来,计划加入 Cruise ID 上的 CRUISE。

最后,CRUISE 表通过 CRUISE 语言 ID 值连接到语言表(这次为 Cruise Language 别名为“CL”)。

因此,您现在有两次相同的表源,每次用于您尝试提取的相应“语言 ID”元素。

于 2012-11-17T07:55:44.953 回答