【发布时间】:2014-04-16 02:31:23
【问题描述】:
例如我有三个表:
Students:
ID, name, address, department, yearEnrolled, etc.
Professors:
ID, name, address, department, etc.
Contractors:
ID, name, address, department, company, etc.
Staff:
ID, name, department, jobClassification, etc.
最后:
Parking Spots:
ID, name, location, dataType, dataID, etc.
dataType 让我知道它是不是 Contractor、Staff、Student 等,然后 ID 是特定的 Student、Staff 等。
这不在关系表中,因为数据是 1:1。一人一车位。 由于此问题范围之外的原因,无法更改表格。
基本上,我有 4 张表格,它们都用于不同类型的数据,还有一张表格将停车位与分配给他们的特定人员联系起来。因此,为什么停车位表包含 dataType。
现在我要做的是一份报告,该报告将显示系统内所有有停车位的人的列表。因此,例如,我想要一份报告,其中列出所有状态为当前的人(当然编码为数字):
Jane, lot 51, Physics Department [department], Student [dataType], 555-5555
John, lot 52, Chemistry Department [department], Professor [dataType], 555-2212
所以我想问题是我如何从多个不同的表中对来自不同表的公共数据进行连接,同时提高查询的性能。
从技术上讲,我可以加入所有数据并带回所有数据,包括大部分为空值,但是当我想要一个所有人的列表并且只是公共的一个子集时,必须有比加入所有不同表更好的方法表(列的相同数据类型)。我也想这会有很糟糕的表现。
所以除了运行四次查询,对每个不同的数据类型一次然后组合它们,或者运行一个包含大量空数据的大规模连接,我还有其他选择吗?
【问题讨论】:
标签: sql performance join