【发布时间】:2016-09-09 01:00:35
【问题描述】:
我写了一个查询,其中有一个包含人名的文件。每个人都有一个家庭身份证。所以同一个家庭的多个成员都将拥有相同的 ID。
我编写了一个查询,首先列出家庭 ID,然后在同一输出行上列出所有家庭成员。
即
ID39874 John Smith Harry Smith Jane Smith
我有一些家庭成员超过 9 人的家庭。我的以下查询非常适合测试带有几条记录的小文件。但是当我使用包含超过 20,000 条记录的文件运行查询时,我的系统会严重挂起。我知道我的系统由于子查询太多而被杀死,但是为了测试,我想不出任何其他方法来解决这个问题。
谁能提出另一种在不杀死我的系统的情况下解决此问题的方法。谢谢
注意 - 我知道我有 8 个子查询来涵盖最多有 9 个家庭成员的家庭。任何少于 9 个成员的家庭只会将成员输出为空值,所以我对这个结果很满意。
工作查询:
select v.family_id, v.full_name,
(select b.full_name
from family_table b
where v.family_id = b.family_id
LIMIT 1,1) as voter_02,
(select c.full_name
from family_table c
where v.family_id = c.family_id
LIMIT 2,1) as voter_03,
(select d.full_name
from family_table d
where v.family_id = d.family_id
LIMIT 3,1) as voter_04,
(select e.full_name
from family_table e
where v.family_id = e.family_id
LIMIT 4,1) as voter_05,
(select f.full_name
from family_table f
where v.family_id = f.family_id
LIMIT 5,1) as voter_06,
(select g.full_name
from family_table g
where v.family_id = g.family_id
LIMIT 6,1) as voter_07,
(select h.full_name
from family_table h
where v.family_id = h.family_id
LIMIT 7,1) as voter_08,
(select i.full_name
from family_table i
where v.family_id = i.family_id
LIMIT 8,1) as voter_09
from family_table v
group by family_id
【问题讨论】:
-
我假设您已经尝试过索引?
-
@bassick 为什么所有成员必须在同一行不同列?
-
blackpen - 我索引了“family_id”列,我从上面的原始查询工作得非常快。谢谢!!
-
@Pachonk - 我有一个我的用户使用的表格编辑器。实际上,我将为每个家庭成员显示另一个相应的列,以便我的用户可以在同一个“家庭编辑页面”上编辑每个家庭和成员的信息。因此,将所有家庭成员和我选择的任何相应信息作为一行查询以适合我的表格编辑器布局,这一点很重要。谢谢