gpt4 book ai didi

mysql - 为多个语言相关表创建 View ,但只为语言创建一列

转载 作者:行者123 更新时间:2023-11-29 15:43:16 25 4
gpt4 key购买 nike

我有一个中心表,其中包含几年的所有日期(主键),然后是周、工作日、月份、季度和财务周期等(在下面的编码中进行了简化)。

我有 2 个附加表,其中包含以下内容的描述:工作日和月份。这两个表与语言相关,这意味着我有一个主键,其中包含“语言”字段,并且是“EN”或“DE”(英语、德语、法语等)。

我喜欢创建一个 View ,但只有一个字段“语言”列,如果我使用 [其中语言为“EN”] 查询该 View ,那么我喜欢该 View 仅获取以下记录英语。目前,我必须使用具有不同别名的两倍语言,但这对我来说似乎很奇怪(而且我有更多这样的文本表)。

这是我的日期中心表格:

CREATE TABLE test.`/dwh/calendar/date_dir` (
date date NOT NULL,
mn decimal(2, 0) UNSIGNED ZEROFILL DEFAULT 00 COMMENT 'Month',
wkday decimal(1, 0) UNSIGNED ZEROFILL DEFAULT 0 COMMENT 'Day of the week',
PRIMARY KEY (date)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 16384,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Directory of dates and corresponding objects';

此表包含每个月的描述:

CREATE TABLE test.`/dwh/calendar/mn_descr` (
mn decimal(2, 0) UNSIGNED ZEROFILL NOT NULL COMMENT 'Month',
language char(2) NOT NULL COMMENT 'Language key',
descr_short char(20) DEFAULT NULL COMMENT 'Short description',
PRIMARY KEY (mn, language)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 2730,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Names of month';

这是工作日的名称:

CREATE TABLE test.`/dwh/calendar/wkday_descr` (
wkday decimal(1, 0) UNSIGNED ZEROFILL NOT NULL COMMENT 'Day of the week',
language char(2) NOT NULL COMMENT 'Language key',
descr_short char(20) DEFAULT NULL COMMENT 'Short description',
PRIMARY KEY (wkday, language)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 2730,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Names of weekdays';

这是我目前的丑陋观点:

SELECT
`/dwh/calendar/date_dir`.`date` AS `date`,
`/dwh/calendar/date_dir`.`mn` AS `mn`,
`/dwh/calendar/date_dir`.`wkday` AS `wkday`,
`/dwh/calendar/yrmn_descr`.`language` AS `yrmn_language`,
`/dwh/calendar/yrmn_descr`.`descr_short` AS `yrmn_descr_short`,
`/dwh/calendar/mn_descr`.`descr_short` AS `mn_descr_short`,
`/dwh/calendar/wkday_descr`.`descr_short` AS `wkday_descr_short`,
`/dwh/calendar/mn_descr`.`language` AS `mn_language`,
`/dwh/calendar/wkday_descr`.`language` AS `wkday_language`
FROM (((`/dwh/calendar/date_dir`
JOIN `/dwh/calendar/wkday_descr`
ON (`/dwh/calendar/date_dir`.`wkday` = `/dwh/calendar/wkday_descr`.`wkday`))
JOIN `/dwh/calendar/mn_descr`
ON (`/dwh/calendar/date_dir`.`mn` = `/dwh/calendar/mn_descr`.`mn`))

因此,该 View 有效,但很丑陋并且看起来不正确。它应该只有一种语言列,并且我传递给该列的任何内容都应该自动向下移动到文本表中。我不能要求用户输入该语言 5 次,也不能编写一大堆 Python 来填充这些字段。好像不对……

最佳答案

在第二个连接的谓词中包含语言,以便检查该月的语言是否与工作日的语言相同。

SELECT `/dwh/calendar/date_dir`.`date` `date`,
`/dwh/calendar/date_dir`.`mn` `mn`,
`/dwh/calendar/date_dir`.`wkday` `wkday`,
`/dwh/calendar/yrmn_descr`.`language` `yrmn_language`,
`/dwh/calendar/yrmn_descr`.`descr_short` `yrmn_descr_short`,
`/dwh/calendar/mn_descr`.`descr_short` `mn_descr_short`,
`/dwh/calendar/wkday_descr`.`descr_short` `wkday_descr_short`,
`/dwh/calendar/mn_descr`.`language` `language`
FROM `/dwh/calendar/date_dir`
INNER JOIN `/dwh/calendar/wkday_descr`
ON `/dwh/calendar/wkday_descr`.`wkday` = `/dwh/calendar/date_dir`.`wkday`
INNER JOIN `/dwh/calendar/mn_descr`
ON `/dwh/calendar/mn_descr`.`mn` = `/dwh/calendar/date_dir`.`mn`
AND `/dwh/calendar/mn_descr`.`language` = `/dwh/calendar/wkday_descr`.`language`;

关于mysql - 为多个语言相关表创建 View ,但只为语言创建一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com