Показать сообщение отдельно
Старый 28.10.2003, 11:54     # 1
Felan
Junior Member
 
Аватар для Felan
 
Регистрация: 19.05.2003
Адрес: Самара
Сообщения: 52

Felan Путь к славе только начался
ПОмогите переделать запрос

Надо переделать запрос, чтоб быстро работал. Дело в том, что если объединять INNER JOIN и OUTER JOIN то почему-то выскакиевает ошибка о невозможности прочетать кусок памяти. Ошибка вылазит и в DBD и в SQL Bilder (тот, что в дельфи встроен). Если везде оставить внешнее соединение, то работае пол дня. Желательно решения в одном запросе, без представлений и т.п. если это конечно возможно.
Речь идет о локальной БД парадокс, работает через БДЕ. D6 c апдейтами.

Такой вариант работает, но уж больно долго.... Никак не придумаю, что с ним можно сделать

/* ALIAS: dbTabel */
SELECT Sotrudniki.So_Family Фамилия, Sotrudniki.So_Name И, Sotrudniki.So_Otchestvo О, Sotrudniki.So_Tabel_Num Sotrudniki."Таб. №", Dolgnosti.D_Name Должность, Sostav_otdelov.Sos_Razryad Разряд, COUNT( T.T_Label_Code ) T."Дни явок", SUM( T.T_Label_Code ) Отработано, COUNT( T2.T_Label_Code ) T2."Дни неявок"
FROM "Sotrudniki.DB" Sotrudniki
LEFT OUTER JOIN "Sostav_Otdelov.DB" Sostav_otdelov
ON (Sotrudniki.So_Code = Sostav_otdelov.Sos_Sotrudnik_Code)
LEFT OUTER JOIN "Dolgnosti.DB" Dolgnosti
ON (Sostav_otdelov.Sos_Dolgnost_Code = Dolgnosti.D_Code)
LEFT OUTER JOIN "Tabel.DB" Tabel
ON (Tabel.T_Sotr_Code = Sostav_otdelov.Sos_Sotrudnik_Code)
LEFT OUTER JOIN "Tabel.DB" T
ON (T.T_Sotr_Code = Tabel.T_Sotr_Code) AND (T.T_Data = Tabel.T_Data) AND (T.T_Label_Code < 9)
LEFT OUTER JOIN "Tabel.DB" T2
ON (T2.T_Sotr_Code = Tabel.T_Sotr_Code) AND (T2.T_Data = Tabel.T_Data) AND (T2.T_Label_Code > 8)
WHERE
Tabel.T_Data BETWEEN CAST( '1.01.2003' AS DATE ) AND CAST( '31.01.2003' AS DATE )
AND (Sostav_otdelov.Sos_Otdel_Code = 1)
GROUP BY Sotrudniki.So_Name, Sotrudniki.So_Otchestvo, Sotrudniki.So_Tabel_Num, Sostav_otdelov.Sos_Razryad, Sotrudniki.So_Family, Dolgnosti.D_Name, Dolgnosti.D_Name
Felan вне форума