> Подсчет количества найденных документов (ну вот захотелось им > такую фичу и все): > > select count(d.id) from t_documents d, > (select w.document_id, count(1) as cnt from t_search_words w, > ( select 2624961196 as wrd from rdb$database union > select 1902388292 as wrd from rdb$database union > select 1228066714 as wrd from rdb$database ) t1 > where w.lang_id=2 and w.flag=1 and w.word=t1.wrd > group by 1 order by 2 desc ) idx > where d.lang_id=2 and d.published_when>='01.07.2002' and > d.published_when<='02.07.2007' and d.publisher_id =36149 and > d.id=idx.document_id and idx.cnt=3 > > Тут все просто - виртуальную табличку, в которой содержатся слова для > поиска объединяем с поисковыми индексами, а результат объединения - > объединяем с таблицей с документами. Указание найти все три слова - > последний and . Про то, что логически правильнее > было бы использовать union all я знаю, но ключевые слова 2 раза не > указывают. > Если кто сможет указать более оптимальный вариант запроса - и такой же > понятный - буду очень признателен.
Это пробовали ? select count(d.id) from t_documents d, (select w.document_id, count(1) as cnt from t_search_words w where w.lang_id=2 and w.flag=1 and w.word in (2624961196, 1902388292, 1228066714) group by 1 order by 2 desc ) idx where d.lang_id=2 and d.published_when>='01.07.2002' and d.published_when<='02.07.2007' and d.publisher_id =36149 and d.id=idx.document_id and idx.cnt=3 и\или select count(d.id) from t_documents d where d.lang_id=2 and d.published_when>='01.07.2002' and d.published_when<='02.07.2007' and d.publisher_id =36149 and exists (select * from _search_words w1 where w.document_id = d.id and w.lang_id=2 and w.flag=1 and w.word = 2624961196) and exists (select * from _search_words w2 where w.document_id = d.id and w.lang_id=2 and w.flag=1 and w.word = 1902388292) and exists (select * from _search_words w3 where w.document_id = d.id and w.lang_id=2 and w.flag=1 and w.word = 1228066714) -- Хорсун Влад