所以对于一个麻烦的数据库,我有一个(对我来说)困难的问题,希望您能为我提供帮助。首先,让我设置场景。似乎数据库是从以前的版本复制到当前的数据库引擎中的。复制的内容似乎是表和列的名称,字段类型和长度以及内容。在整个数据库中,没有主键或外键。此外,旧数据库未标准化,当前数据库未标准化。为了使其更加有趣,我无法选择全部重建或更改任何内容。我唯一能做的就是运行选择查询。
在这种情况下,我有以下相关的表和列:
Table:
Facilities
Columns:
Asset_ID (bigint)
Asset_Category (bigint)
Table:
Gardens
Columns:
Asset_ID (bigint)
Asset_Category (bigint)
Table:
Equipment
Columns:
Asset_ID (bigint)
Asset_Category (bigint)
Table:
Structures
Columns:
Asset_ID (bigint)
Asset_Category (bigint)
每个都有相同类型的信息。例如,设施可能包含割草机,花园可能包含割草机。正如我所说,这是不规范的。数据以这种方式添加到不同的表中,而无需考虑有用性或标准化。每个ID字段都是一个bingint,并且和该字段一样有用。
此外,我还有以下表格:
Table:
Depots
Columns:
ID (bigint)
Name (varchar)
Table:
Area
Columns:
ID (bigint)
Site_ID (bigint)
Name (varchar)
Table:
Asset_Category
Columns:
Type_ID (bigint)
Category_ID (bigint)
Category_Name (varchar)
Table:
Depot_Assets
Columns:
Depot_ID (bigint)
Asset_ID (bigint)
Table:
Facility_Assets
Columns:
Asset_ID (bigint)
Category (bigint)
现在,我猜测Asset_ID和Category_ID在表之间以某种方式神奇地匹配,存在一定程度的一致性,但是由于没有键且没有规范化,因此目前无法确定。
我被要求制作一份报告,显示每个地点每个类别的资产数量。我试图将前四个表的结果组合如下:
inner join
(select "Asset_ID", "Category" from "Facilities" union all
select "Asset_ID", "Category" from "Gardens" union all
select "Asset_ID", "Category" from "Equipment" union all
select "Asset_ID", "Category" from "Structures") as temp
on (temp."Category" = "Asset_Category"."Category_ID")
但是,除此之外,我对于如何获取分配给每个位置的每个类别(按Area.Name)的资产列表一无所知。
任何帮助和解释将不胜感激。