Выбрать внутри выбора

У меня есть таблица в моей базе данных, которая содержит все записи для группы людей, как мужчин, так и женщин, а также их потомков. В каждой записи указано место рождения этого лица.

Я пытаюсь создать курсор для отображения всех рождений между определенным диапазоном дат, которые показывают идентификатор человека, его дату рождения и их родителей. Пока с этим проблем нет

Мой оператор SELECT выглядит следующим образом

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

Это дает мне именно то, что я хочу - СЕЙЧАС я хочу получить состояние рождения отца и матери из одного и того же файла, есть ли способ сделать это динамически (в том же операторе select)?


person Hank    schedule 01.02.2013    source источник
comment
Предполагая, что в вашей таблице есть одна запись на человека, вы можете исключить DISTINCT из этого запроса и ускорить его.   -  person Tamar E. Granor    schedule 02.02.2013
comment
Тамара, хотела сказать, какая замечательная книга у вас MS Office Automation with Visual FoxPro, отличная книга   -  person Hank    schedule 04.02.2013
comment
Спасибо. Рад, что это помогло вам.   -  person Tamar E. Granor    schedule 04.02.2013


Ответы (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 в таблице членов.

person aquinas    schedule 01.02.2013

@aquinas, это не лучший синтаксис для VFP. Вы использовали м. как местный псевдоним! Это должны быть m.ldStartDate и m.ldEndDate, но с остальными m. в этом запросе просто приглашение к ошибке (логическая ошибка, она может остаться незамеченной или отображаться как ошибка, только если вам повезет).

Пожалуйста, забронируйте м. для переменных памяти. mdot, работающий таким образом в этом запросе, является всего лишь ошибкой, которую никогда не исправить.

PS: Если вы опытный разработчик то вас это может и не укусить. Тем не менее, я бы подумал, что владелец вопроса как начинающий / средний, и он / она не должен изучать его таким образом.

person CetinBasoz    schedule 21.02.2013