Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
ВнизQuery глючит? Найти похожие ветки
← →
Vladimir* (2002-09-13 10:31) [0]Hello All!
Вот такая конструкция
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.ADD("SELECT COUNT(DISTINCT NMB1) FROM BAZA");
Query2.SQL.ADD(" WHERE NMB2 ="+""""+f4+"""");
Query2.SQL.ADD(" AND PERIOD BETWEEN "+""""+f5+"""");
Query2.SQL.Add(" AND "+""""+f6+"""");
Query2.Open;
работает правильно, если у DBF-таблицы (BAZA) нет индекса, а если есть, то совсем даже криво((
Посоветуйте, плз, как лечить?
← →
Johnmen (2002-09-13 10:35) [1]И в чем же кривизна то ? И что лечить ?
← →
Vladimir* (2002-09-13 10:41) [2]Так чтоб и индексом считала ПРАВИЛЬНО!
← →
ЮЮ (2002-09-13 10:51) [3]Для начала поставь * вместо COUNT(DISTINCT NMB1) и сравни, какие записи возвращаются в первом случае, а какие во втором. От того и пляши
← →
Val (2002-09-13 10:52) [4]попробуйте сделать выборку с подзапросом, типа
select count(nmb1) from
(select distinct nmb1 from...)
← →
Vladimir* (2002-09-13 10:58) [5]да пробовал все, даже в фоксе пересчитывал, и с Query и
ручками считал, репу морщил, вывод один - индекс мешает.
хотя по идее не должен...
можно его отключить как-то?
← →
Val (2002-09-13 11:06) [6]drop index..
query..
create index..
← →
ЮЮ (2002-09-13 11:13) [7]>можно его отключить как-то?
ИЗМЕНИ условие, например,
WHERE NB2<>0 and NMB2 ="+""""+f4+""""AND .
Условие с <> приводит к полному сканированию таблицы, тем самым "отключая" индексы
← →
Vladimir* (2002-09-13 13:01) [8]ни хрена он не отключает(( <>0
← →
VAleksey (2002-09-13 13:09) [9]Я что-то так и не уловил в чем кривизна. Пожалуйста пример таблички. И пример того что возвращает запрос из проиндексированной таблицы а что из не проиндексированной.
И вообще подобный запрос работоет ?
Конечно проверю ..., но просто сейчас сомнения одолели :).
← →
VAleksey (2002-09-13 13:14) [10]Запросик работает. В чем кривизна ?
← →
Vladimir* (2002-09-13 14:29) [11]BAZA - dbf table
NMB1, NMB2, PERIOD - символьные поля, построен индекс c тегом NMB2+PERIOD.
Так вот запрос
Query1.Close;
Query1.SQL.Clear;
Query1.DatabaseName:="E:\BAZA";
Query1.SQL.ADD("SELECT COUNT(NMB1) FROM BAZA");
Query1.SQL.ADD(" WHERE NMB2 ="+ """+f4+""");
Query1.SQL.ADD(" AND PEROID BETWEEN "+"""+f5+""");
Query1.SQL.ADD(" AND "+"""+f6+""");
Query1.Open;
возвращает количество записей по полю NMB1, удовлетворяющих условию NMB2=F4 и лежащих в диапазоне PERIOD от F5 до F6, правильно, их 60 записей, и не важно, с индексом таблица или нет.
а вот запрос
Query2.Close;
Query2.SQL.Clear;
Query2.DatabaseName:="E:\BAZA";
Query2.SQL.ADD("SELECT COUNT(DISTINCT NMB1) FROM BAZA");
Query2.SQL.ADD(" WHERE NMB2 ="+"""+f4+""");
Query2.SQL.ADD(" AND PERIOD BETWEEN "+"""+f5+""");
Query2.SQL.Add(" AND "+"""+f6+""");
Query2.Open;
по идее должен возвращать количество НЕПОВТОРЯЮЩИХСЯ записей по полю NMB1, удовлетворяющих условию NMB2=F4 и лежащих в диапазоне PERIOD от F5 до F6, но...
если индексного файла нет (таблица не индексирована), тогда получается 15 записей, и это правильный ответ,
но если таблица индексирована, тогда почему-то 59...
что за хрень??
← →
Vladimir* (2002-09-13 14:52) [12]кстати, а вложенные запросы типа select ... from (select ... ) она понимает?
← →
Val (2002-09-13 15:13) [13]>Vladimir* (13.09.02 14:52)
так это, все кнопки в руки :)
← →
Vladimir* (2002-09-13 16:00) [14]ага, попробовал, а в ответ
NESTED SELECT NOT SUPPOR
во бли!
сделал уже индекс уникальный, один хрен, считает неправильно((
← →
Val (2002-09-13 16:10) [15]>Vladimir* (13.09.02 16:00)
по поводу вложенных запросов см. Local SQL Help->Views
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c