mySQL,在同一个表上使用不同的标准进行多个连接。在查询时重命名列

时间:2012-11-17 06:37:59

标签: mysql join

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

首先,下图描绘了我正在创建的数据库的一部分。我的目标(除非有更好的方法)是支持多种语言的字段,通常称为“schedule_name”和“schedule_description”之类的单独表格。 P.S - 我知道此图中的列类型标记错误。

database

正如您所看到的,船只,游轮和时间表都有一个外键作为外键。如果我想用游轮和船只取出时间表记录,我该怎么办呢?

我的表连接没有问题,列别名'已排序但是,希望在每个别名中获取正确的详细信息。为清楚起见

日程表有自己的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是 - Blue Dolphin

回答对这个问题的评论; en代表英语,zhs代表simplfied chinese,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 

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

1 个答案:

答案 0 :(得分: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)加入语言(第一次在日程表语言ID连接上别名为“SL”)。

接下来,时间表将加入Cruise ID上的CRUISE。

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

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