【发布时间】:2011-03-10 16:23:36
【问题描述】:
我有两张桌子:
家长信息
儿童信息
两者的结构(几乎)相同,但有一些细微差别。
表结构如下:
家长
ID | First | Last | DOB | Address
-------------------------------------------------
1 | John | Doe | 1980-01-01 | 123 street
家属
ParentID | Type | First | Last | DOB
--------------------------------------------------
1 | Spouse | Jane | Doe | 1981-02-01
1 | Child | Mike | Doe | 1999-08-01
1 | Child | Zoe | Doe | 2002-04-01
我想构建一个查询(理想情况下,带有连接的单个调用会返回以下内容:
表格结果
First | Last | Type | DOB | Address
----------------------------------------------------------------
John | Doe | Parent | 1980-01-01 | 123 Street
Jane | Doe | Spouse | 1981-02-01 | 123 Street
Mike | Doe | Child | 1999-08-01 | 123 street
Zoe | Doe | Child | 2002-04-01 | 123 Street
我想我可以在从属表上使用 LEFT JOIN 构建最初的子查询(并非所有父母都有从属),然后运行一个过滤该表的主查询,但是 - 当我这样做时,查询会占用一整分钟生产。 (我的表每天更改数百次,因此保留表的索引并不是一个真正的选择,因为我必须不断地重建)。
更新
我想得越多,即使是左连接也不一定有效,因为父信息和第一组依赖信息将驻留在子查询的同一行中(这反过来又使主查询“不可能”将单行过滤成多行)。
有什么想法吗?
【问题讨论】:
-
父母和家属之间的连接字段是什么?我希望在 Dependents 中看到 ParentID 字段......而且我很确定索引会自行重建,您不必自己重建它们。
-
@Bobby - 我在我的回答中提到了左连接 - 无论如何,左连接也会返回重复数百次的第一条记录的结果集 - 不是我想要的
-
@Leslie - 抱歉我的字段标记错误,家属被映射到具有父母主 ID 的父母 - 而且 - 我的理解是索引不会根据我所看到的一切重建自身。我不一定希望每次对具有 20,000 条记录的表进行修改时都进行索引重建