| 
 | 
| 
 
Помогите с составлением запроса 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Вобщем не могу составить запрос. Есть три таблицы: 1) Таблица Docs Id_Doc - ключ Name_Doc - имя документа 2) Таблица Words Id_Word - ключ Name_Word - слово 3) Таблица Words2Docs Id_Word - составной ключ Id_Doc - составной ключ Таблицы Docs и Words связаны между собой посредством Words2Docs. Например, нужно выбрать из Docs все документы где встречаются слова 'налог' _И_ 'ставка'. Когда одно слово тут все понятно - LIKE '%налог%', а вот как быть с несколькими? Помогите советом плиз. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.05.2003, 12:39 | 
  
  
  
   | 
||
| 
 
Помогите с составлением запроса 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  select * from Docs where Id_Doc in ( select Id_Doc from Words2Docs where Id_Word in ( select Id_Word from Words where Name_Word like '%jopa% or Name_Word like '%popa%' ) ) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.05.2003, 14:21 | 
  
  
  
   | 
||
| 
 
Помогите с составлением запроса 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Огромное человеческое спасибо! ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.05.2003, 16:38 | 
  
  
  
   | 
||
| 
 
Помогите с составлением запроса 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  2 ReAlex: Вы уверены, что надо искать LIKE '%налог%', а, например, не = 'налог'? В этом случае при поиске использовался бы индекс... Стройте нужные индексы, выбирайте, какой запрос будет быстрее... select distinct Id_Doc, Name_Doc from Words join Words2Docs using(Id_Word) join Docs using(Id_Doc) where Name_Word like '%jopa%' or Name_Word like '%popa%'; select Id_Doc, Name_Doc from Words join Words2Docs using(Id_Word) join Docs using(Id_Doc) where Name_Word like '%jopa%' union select Id_Doc, Name_Doc from Words join Words2Docs using(Id_Word) join Docs using(Id_Doc) where Name_Word like '%popa%'; select * from Docs where exists ( select 1 from Words2Docs where Id_Doc=Docs.Id_Doc and exists ( select 1 from Words where Id_Word=Words2Docs.Id_Word and ( Name_Word like '%jopa%' or Name_Word like '%popa%' ) ) ); 2 wbear: Вы смотрели explain вашего запроса? Недавно сам натолкнулся на грабли постгресового IN-а. Как написано в доке: it's unwise to assume that the subquery will be evaluated completely. :-( Эффективнее такой запрос: select * from Docs where Id_Doc in ( select Id_Doc from Words2Docs where Id_Doc=Docs.Id_Doc and Id_Word in ( select Id_Word from Words where Id_Word=Words2Docs.Id_Word and ( Name_Word like '%jopa%' or Name_Word like '%popa%' ) ) ); Более читабелен идентичный: select * from Docs where exists ( select 1 from Words2Docs where Id_Doc=Docs.Id_Doc and exists ( select 1 from Words where Id_Word=Words2Docs.Id_Word and ( Name_Word like '%jopa%' or Name_Word like '%popa%' ) ) ); ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 21.05.2003, 14:30 | 
  
  
  
   | 
||
| 
 
Помогите с составлением запроса 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  я конечно гад что новичку подсовываю запрос которы можно более оптимально написать... но чтож поделаеш... можно было конечто развить тему и написать ему что мол нужна вакуум делать чаще, подумать что мол следует еше seq_scan вырубить, шаред памяти выкрутить и т.д... тока у меня создалось впечатление что человек еще SQL плохо знает и емуб сначало научится простому а уж потом оптимизироватся...зачем лишний раз бошку ему засорять...да и лень мне было.. :) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 24.05.2003, 15:49 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=53&msg=32164245&tid=2008195]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    14ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    59ms | 
get topic data:  | 
    8ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    41ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 12ms | 
| total: | 155ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...