|
Помогите избавить запрос от IN
|
|||
---|---|---|---|
#18+
Блин, казалось бы простая задача. Есть 2 таблицы Firms(фирмы) и Inord (приходы) (один-ко-многим). С фирмами все ясно, в Inord есть поле FirmId. Мне нужно выбрать пересечение фирм в двух таблицах. Смог сделать только так с In Select * from Firms where firmid in (Select FirmId from Inord) Однако это очень медленно так как firms - natural и для каждой записи перебирается вся таблица inord С join тоже ничего не выходит если перебирать inord, то будет фигня. Если перебирать фирмы, то он тоже будет липить лишние записи. Подскажите пожалуйста как мне быть ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2002, 17:57 |
|
Помогите избавить запрос от IN
|
|||
---|---|---|---|
#18+
используй select DISTINCT * это позволит избавиться от дублированных строк фирм select DISTINCT a.*, b.firmid as dfirmid from Firms a, Inord b where a.FirmId=b.FirmId может так будет быстрей. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2002, 07:25 |
|
Помогите избавить запрос от IN
|
|||
---|---|---|---|
#18+
привет Не понял постановки задачи, если честно но подобные случаи с IN всегда (рефлекторно:) заменяю на EXISTS Select * From Firms F WHERE exists(select * from inord i where i.firmid=F.firmid) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2002, 11:02 |
|
Помогите избавить запрос от IN
|
|||
---|---|---|---|
#18+
Спасибо за ответы. 2 Jonyk По поводу Distinct - это я тоже пробовал. Работает гораздо медленнее. 2 Алексей Ковязин По поводу Exists - это не пробовал. Этот запрос именно то, что мне надо, т.е. Мне нужно вывести список фирм, которые участвовали в приходе. От in хотел избавится, т.к., очевидно, что при нем идет natural по двум таблицам. Попробую с Exists может быть будет быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2002, 16:00 |
|
|
start [/forum/topic.php?fid=40&msg=32085312&tid=1580975]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 291ms |
total: | 450ms |
0 / 0 |