Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка из FB / 13 сообщений из 13, страница 1 из 1
14.02.2007, 15:00
    #34330594
RIGOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Добрый день. Если кто сталкивался, подскажите решение проблем.
1.Делается выборка из FB (жар-птица), выбирается некоторое количество записей(порядка 300000). На следующий день при выгрузке записей становится больше, работа с данными не ведется, запросы не меняются, вирусов нет. Периодичность изменения кол-ва записей 1000-2000. Из-за чего?
2.В базе FB есть запись, ее видно, но выгрузка ее не происходит. Из-за чего?
Все выгружается в VFP9
...
Рейтинг: 0 / 0
14.02.2007, 15:08
    #34330646
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Текст запроса в студию.
...
Рейтинг: 0 / 0
14.02.2007, 15:13
    #34330677
RIGOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Высылаю файл
...
Рейтинг: 0 / 0
14.02.2007, 15:30
    #34330743
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Ответьте, какие нижеперечисленные таблицы не меняются

авторT01_PERSONS
H02_PERSADDRESSES
H01_PERSDOCS
H03_PERSPOLICIES
T03_CONTRACTS
T02_ORGS
T04_POLICIES
...
Рейтинг: 0 / 0
14.02.2007, 15:57
    #34330887
RIGOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Таблицы Т_01,02,03 - данные адекватные на данный момент.
Таблицы Н_01,02,03 - данные об историях изменнений в таблицах Т_.
Выгрузка производилась в выходные дни, изменений не вносилось.
Данные, которые я вижу в FB и не могу выгрузить в Фокс, на момент выгрузки не редактируются, не просматриваются
...
Рейтинг: 0 / 0
15.02.2007, 09:51
    #34332199
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Тогда рассказывай по порядку, что делаешь, например

- вчера выбрал из БД, получил 300 тыс записей
- в таблицах было
T01_PERSONS = 1000 записей
H02_PERSADDRESSES = ....
H01_PERSDOCS = ....
H03_PERSPOLICIES
T03_CONTRACTS
T02_ORGS
T04_POLICIES

- сегодня делаю тот же самый запрос, получаю 290 тыс записей
- в таблицах записей ......

PS Обрати внимание, что не указана таблица T04_POLICIES как статическая.

PSS Повесь триггеры аудита на приведенные таблицы (на insert/delete), тогда можно будет посмотреть действительно не изменяются таблицы или всё таки что-то в них записывается и удаляется
...
Рейтинг: 0 / 0
15.02.2007, 10:49
    #34332386
RIGOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Сейчас нестоль актуален вопрос об изменении количества записей, кстати их количество увеличивается, а не уменьшается. Больше интересует вопрос, почему при наличии записи в базе, даже если убрать истории изменений, и брать только актуальные данные, не все АКТУАЛЬНЫЕ записи выгружаются, хотя после выгрузки я невыгруженные записи в FB вижу, и вносились они давно (более 3 суток)
...
Рейтинг: 0 / 0
15.02.2007, 10:58
    #34332430
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
RIGORСейчас нестоль актуален вопрос об изменении количества записей, кстати их количество увеличивается, а не уменьшается. Больше интересует вопрос, почему при наличии записи в базе, даже если убрать истории изменений, и брать только актуальные данные, не все АКТУАЛЬНЫЕ записи выгружаются, хотя после выгрузки я невыгруженные записи в FB вижу, и вносились они давно (более 3 суток)

Значит вопрос про разное кол-во записей снят.

Теперь, что подразумевается под понятием - "актуальные записи" чем они отличаются то других записей, как в select-e оставляются только актуальные записи, каким оператором.

PS а лучше бы привести контрольный пример на Фоксе, и показать вот в Фоксе я получаю такую вот выборку, а при всех прочих равных условиях FB дает выборку отличающуюсю от Фоксовской тем-то и тем-то.
...
Рейтинг: 0 / 0
15.02.2007, 12:07
    #34332738
RIGOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Актуальные записи - записи, содержащие данные по персоналиям и их документам, которые являются действительными и действующими на данный момент, т.е. при изменении ФИО, номера или серии документа, адреса, мы должны и видим данные актульаные на текущее время (таблицы Т_). Все изменения хранятся в таблицах Н_, инвал_дат - дата, когда были внесены измения.
Пример выглядит так: выбираю из FB некоторое кол-во записей (эти записи являются эталоном для последующих проверок). Выгружаю их в DBF (несколько SELECT-ов), которые идут после токого, кот орый я приводил. Начинаю сравнивать их по контрольному полю с внешними данными (их приносят в DBF). Сравнение показывает - такой записи среди выбранных нет. Далее через поисковую форму, сделанную в FB, ищу по контрольному полю и вижу эту запись. Проверяю наличие записи в RemoView - там этой записи нет, хотя должно выбираться ВООБЩЕ ВСЕ и актуальные и неактульные данные.
...
Рейтинг: 0 / 0
15.02.2007, 12:21
    #34332811
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
RIGOR.... Сравнение показывает - такой записи среди выбранных нет. Далее через поисковую форму, сделанную в FB, ищу по контрольному полю и вижу эту запись. Проверяю наличие записи в RemoView - там этой записи нет, хотя должно выбираться ВООБЩЕ ВСЕ и актуальные и неактульные данные.


Переделываем запрос, теперь все записи есть и те которые есть в БД, но раньше не предьявлялись?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT T01_persons.PERS_LN, T01_persons.PERS_FN, T01_persons.PERS_MN,;
  T01_persons.PERS_BIRTH, H03_perspolicies.CONTRACT_ID,;
  H03_perspolicies.END_DATE, H03_perspolicies.INVAL_DATE,;
  T03_contracts.CONTR_STARTDATE, T03_contracts.CONTR_ENDDATE,;
  T02_orgs.RNUMBER, T02_orgs.RNUMBER15, T04_policies.POLICY_SERIES,;
  T04_policies.POLICY_NUMBER, H02_persaddresses.INVAL_DATE,;
  T02_orgs.INVAL_DATE, H01_persdocs.INVAL_DATE;
 FROM ;
     T01_PERSONS T01_persons ;
    left JOIN H02_PERSADDRESSES H02_persaddresses ;
   ON  T01_persons.ID_PERSON = H02_persaddresses.PERSON_ID ;
    left JOIN H01_PERSDOCS H01_persdocs ;
   ON  T01_persons.ID_PERSON = H01_persdocs.PERSON_ID ;
    left JOIN H03_PERSPOLICIES H03_perspolicies ;
   ON  T01_persons.ID_PERSON = H03_perspolicies.PERSON_ID ;
    left JOIN T03_CONTRACTS T03_contracts ;
   ON  H03_perspolicies.CONTRACT_ID = T03_contracts.ID_CONTRACT ;
    left JOIN T02_ORGS T02_orgs ;
   ON  T03_contracts.ORG_ID = T02_orgs.ID_ORG ;
    left JOIN T04_POLICIES T04_policies ;
   ON  H03_perspolicies.POLICY_ID = T04_policies.ID_POLICY;
 ORDER BY H03_perspolicies.END_DATE
...
Рейтинг: 0 / 0
15.02.2007, 12:47
    #34332944
RIGOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Все заработало. ОГРОМНОЕ СПАСИБО.
Объясните, пожайлуста, а в чем принципиальная разница в данной ситуации между INNER и LEFT JOIN?
...
Рейтинг: 0 / 0
15.02.2007, 13:05
    #34333031
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CLEAR

CREATE CURSOR cMaster (f1 i, f2 c( 20 ))

CREATE CURSOR cdetails (f1 i, f2 c( 20 ))

INSERT INTO cMaster VALUES ( 1 , 'First record Master')
INSERT INTO cMaster VALUES ( 2 , 'Second record Master')

INSERT INTO cDetails VALUES ( 1 , 'First record Details')

SELECT * FROM cMaster cm INNER JOIN cDetails cd ON cm.f1 = cd.f1 INTO CURSOR cur
? 'Inner join'
LIST  
? 'Left join'
SELECT * FROM cMaster cm Left JOIN cDetails cd ON cm.f1 = cd.f1 INTO CURSOR cur
LIST 

Вот смотри есть две таблички (Мастер и Детали), в таблице Мастер две записи, в таблице Детали одна запись удовлетворяющая только первой записи таблицы Мастер.

При Inner Join в результирующую выборку попадут ТОЛЬКО те записи у которых точно совпадает условие обьединения.

При Left Join в выборку попадут ВСЕ записи из таблицы Мастер, те той таблиц которая была упомянута первой (слева) и только те записи из Деталей у которых есть точное совпадение по условию обьединения.

Например, если изменить порядок следования таблиц при Left Join, то получим другой результат

Код: plaintext
1.
SELECT * FROM cDetails cd Left JOIN cMaster cm ON cm.f1 = cd.f1 INTO CURSOR cur
LIST 
...
Рейтинг: 0 / 0
15.02.2007, 13:09
    #34333063
RIGOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из FB
Все понял. Еще раз спасибо
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка из FB / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]