2013-02-01 40 views
0

我在我的数据库中有一张表,其中包含一组个人的所有记录,包括男性和女性以及他们的后代。每个记录都有个人出生地。在选择中选择

我试图创建一个光标,以显示所有出生日期之间显示个人的身份证,他们的出生日期和他们的父母之间的所有出生。到目前为止,与

我的SELECT语句没有问题如下

SELECT DISTINCT IdNumber,birthstate, sex, DateOfBirth, father, mother; 
FROM members; 
WHERE (DateOfDeath>=ldStartDate AND DateOfDeath<=ldEndDate); 
ORDER BY 1; 
INTO CURSOR ReportMaster 

这给我我想要的东西 - 现在我想要做的是从同一个文件内拉的父亲和母亲的birthstate,有没有办法动态地执行它(在同一个select语句中)?

+0

假设您的表中每个人有一条记录,您可以消除此查询中的DISTINCT并加快速度。 –

+0

Tamar,想告诉你一本很棒的书,你的MS Office自动化与Visual FoxPro,好书 – Hank

+0

谢谢。很高兴它帮助你。 –

回答

2
SELECT DISTINCT m.IdNumber,m.birthstate, m.sex, m.DateOfBirth, m.father, m.mother, 
    mother.birthstate, father.birthsate 
    FROM members m 
    left outer join members mother on mother.IdNumber = m.mother 
    left outer join members father on father.IdNumber = m.father 
    WHERE (m.DateOfDeath>=ldStartDate AND m.DateOfDeath<=ldEndDate) 

如果你确实知道你总是有父亲和母亲,你或许可以将左外连接更改为内连接。

我还假设“母亲”和“父亲”是成员表中IdNumber列的外键。

+0

工作,谢谢 – Hank

0

@aquinas, 这不是VFP的好语法。你已经使用了m。作为本地别名!它应该是m.ldStartDate和m.ldEndDate,但其余的m。在那个查询中,只是一个错误的邀请(逻辑错误,可能会被忽视或只有在幸运的时候才显示为错误)。

请保留m。为内存变量。在这个查询中以这种方式工作的mdot只是一个永远不会被纠正的错误。 PS:如果你是一位经验丰富的开发人员,那么它可能不会咬你。但是,我会认为问题的主人是初学者/中级人员,她/她不应该这样学习。