Текущий архив: 2003.02.06;
Скачать: CL | DM;
ВнизВот фрагмент кода программы Найти похожие ветки
← →
aOlegY (2003-01-17 15:03) [0]
Локальная БД Paradox
Вот фрагмент кода программы:
Query.SQL.Clear;
Query.SQL.Add("Select");
Query.SQL.Add(" Lgotn01.N_Potr, Lgotn01.N_Gr_Lgot, Lgots.Percent");
Query.SQL.Add("from");
Query.SQL.Add(" ":work:Lgotn01" lgotn01, Lgots");
Query.SQL.Add("where");
Query.SQL.Add(" Lgots.N_Lgot = Lgotn01.N_Gr_Lgot");
Query.SQL.Add(" and Lgots.Year_ * 12 + Lgots.Month_ = Lgotn01.MonthLgs");
Query.Prepare;
Query.Open;
Вот фрагмент таблицы Lgotn_01:
N_Potr N_Gr_Lgot MonthLgs
----------------------------------
.................
16017 1 24034
16017 6 24034
16017 7 24034
...............
и ещё около 6-ти тысяч записей
Вот фрагмент таблицы Lgots:
N_Lgot Month_ Year Percent
--------------------------------------
.............
1 10 2002 0
6 10 2002 50
7 10 2002 50
..............
После выполнения вышеприведённого кода результирующей таблице
получается только 2 записи с N_Potr=16017
N_Potr N_Gr_Lgot Percent
--------------------------
16017 6 50
16017 6 50
Хотя должно быть 3. ПОЧЕМУ??????? Как сделать, что бы правильно работало?
Если в таблице Lgotn01 оставить только записи с N_Potr = 16017,
то всё работает правильно.
← →
MsGuns (2003-01-17 15:35) [1]Для начала каждое из условий Where возьми в скобки (по типу Паскаля)
← →
aOlegY (2003-01-17 15:54) [2]Поставил скобки. Всё равно, результат такой же неправильный выдаётся
← →
MsGuns (2003-01-17 16:07) [3]Отладь запрос в SQL Explorer. Что-то странненько. Особенно если учесть:
> Если в таблице Lgotn01 оставить только записи с N_Potr = 16017,
то всё работает правильно.
Можно для верности применить конструкцию JOIN, но все равно непонятно 8-(
← →
aOlegY (2003-01-20 10:47) [4]В SQL Explorere - Даже если в запрос добавить условие (and N_Potr = 16017), то возращает три записи. Убираю (N_Potr = 16017) - возращает только две строчки с N_Potr = 16017. Может обратиться в службу технической поддержки Borland?
Left outer join работает правильно, но не подходит, потому что медленно.
Мне удалось уйти от проблемы разбив запрос на два запроса и созданием ещё одной временной таблицы:
Query.Sql.Clear;
Query.Sql.Add("Select");
Query.Sql.Add(" N_Lgot, Percent, N_Type_Calc_Lgot, (Year_ * 12 + Month_) as MonthLgs");
Query.Sql.Add("from");
Query.Sql.Add(" Lgots");
Query.Prepare;
Query.Open;
MakePermanent(Query, "work", "Lgots01");
Query.SQL.Clear;
Query.SQL.Add("Select");
Query.SQL.Add(" Lgotn01.N_Potr, Lgots01.N_Lgot, Lgots01.Percent");
Query.SQL.Add("from");
Query.SQL.Add(" ":work:Lgotn01", ":work:Lgots01"");
Query.SQL.Add("where");
Query.SQL.Add(" (Lgots01.N_Lgot = Lgotn01.N_Gr_Lgot)");
Query.SQL.Add(" and Lgots01.MonthLgs = Lgotn01.MonthLgs");
Query.Prepare;
Query.Open;
Страницы: 1 вся ветка
Текущий архив: 2003.02.06;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.011 c