我有两张桌子:
家长信息
儿童信息
两者的结构(几乎)相同,但有一些细微差别。
表格结构如下:
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
我想我可以在dependents表上构建一个带有LEFT JOIN的原始子查询(并非所有父项都有依赖项)然后运行一个过滤该表的主查询,但是 - 当我这样做时,查询需要一整分钟生产。 (我的表每天更改数百次,因此保留表的索引并不是一个选项,因为我必须不断重建)。
我对它的思考越多,即使左连接也不会起作用,因为父信息和第一组依赖信息将驻留在子查询的同一行上(反过来使主查询'不可能'将单行过滤为多个。)
有什么想法吗?
答案 0 :(得分:1)
SELECT t.First, t.Last, t.Type, t.DOB, t.Address
FROM (SELECT ID, First, Last, 'Parent' as Type, DOB, Address, 1 as SortKey
FROM Parent
UNION ALL
SELECT p.ID, d.First, d.Last, d.Type, d.DOB, p.Address,
CASE WHEN d.Type = 'Spouse' THEN 2 ELSE 3 END as SortKey
FROM Dependents d
INNER JOIN Parent p
ON d.ParentID = p.ID) t
ORDER BY t.ID, t.SortKey