【发布时间】:2022-01-19 20:14:32
【问题描述】:
这比通常如何显示一个表中不在另一个表中的记录要复杂一些。
相反,一个表中的每条记录应该在另一个表中出现“x”次。
表定义及数据如下:
CREATE TABLE `time_code` (
`ID` bigint NOT NULL AUTO_INCREMENT,
`AREA_ID` bigint NOT NULL,
`TIME_CODE` varchar(10) NOT NULL,
`DESCRIPTION` varchar(255) NOT NULL,
`FISCAL_YEAR` bigint NOT NULL,
PRIMARY KEY (`ID`)
)
Id, Area, Timecode, Description, Fiscal Year
1, 51, 101, "Project A", 2022
2, 51, 102, "Project B", 2022
CREATE TABLE `schedule_data` (
`ID` bigint NOT NULL AUTO_INCREMENT,
`AREA_ID` bigint NOT NULL,
`TERRITORY_ID` bigint NOT NULL,
`GROUP_ID` bigint NOT NULL,
`TIMECODE_ID` bigint NOT NULL,
`CALENDAR_MONTH` bigint NOT NULL,
`FISCAL_YEAR` bigint not null,
PRIMARY KEY (`ID`)
)
Id, Area, Territory, Group, Timecode ID, Month, Fiscal Year
1, 51, 52, 53, 1, 2, 2022
2, 51, 52, 54, 1, 2, 2022
3, 51, 52, 55, 1, 2, 2022
4, 51, 52, 53, 2, 2, 2022
在本例中,时间码 101 出现在每个组(53、54 和 55)中。时间码 102 仅出现在第 53 组中。它在第 54 组和第 55 组中缺失。
每个时间码必须出现在每个组的 schedule_data 表中(3 次,但可能会因组数而异)
如何编写一个查询来告诉我哪些组缺少时间码?
时间代码适用于整个区域,并且每个组的代码必须只存在一次......即使跟踪的值为零。
编辑以添加组织代码表和示例记录:
// adjacency list model
CREATE TABLE `organization_map` (
`ID` bigint NOT NULL AUTO_INCREMENT,
`ORG_CODE` bigint NOT NULL,
`NAME` varchar(255) NOT NULL,
`PARENT_ID` bigint NOT NULL,
`FISCAL_YEAR` bigint NOT NULL,
PRIMARY KEY (`ID`)
)
Id, Org Code, Name, Parent Id, Fiscal Year
51, 1, "Area 1", 0, 2022
52, 1, "Territory 1", 51, 2022
53, 5, "Group 1", 52, 2022
54, 6, "Group 2", 52, 2022
55, 7, "Group 3", 52, 2022
56, 2, "Territory 2", 51, 2022
57, 14, "Group 4", 56, 2022
58, 15, "Group 5", 56, 2022
【问题讨论】:
-
你有一个包含所有组的表吗?这会有所帮助。