问候并感谢您阅读我的问题。
首先,下图描绘了我正在创建的数据库的一部分。我的目标(除非有更好的方法)是支持多种语言的字段,通常称为“schedule_name”和“schedule_description”之类的单独表格。 P.S - 我知道此图中的列类型标记错误。
正如您所看到的,船只,游轮和时间表都有一个外键作为外键。如果我想用游轮和船只取出时间表记录,我该怎么办呢?
我的表连接没有问题,列别名'已排序但是,希望在每个别名中获取正确的详细信息。为清楚起见
日程表有自己的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
这让您了解我将如何从数据库中获取数据。我的主要问题是如何在同一个查询中删除语言记录。感谢您阅读我的问题。
答案 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”元素。