Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите избавить запрос от IN / 5 сообщений из 5, страница 1 из 1
26.12.2002, 17:57
    #32084930
Babrow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавить запрос от IN
Блин, казалось бы простая задача.
Есть 2 таблицы Firms(фирмы) и Inord (приходы) (один-ко-многим). С фирмами все ясно, в Inord есть поле FirmId. Мне нужно выбрать пересечение фирм в двух таблицах.

Смог сделать только так с In
Select * from Firms where firmid in (Select FirmId from Inord)
Однако это очень медленно так как firms - natural и для каждой записи перебирается вся таблица inord

С join тоже ничего не выходит если перебирать inord, то будет фигня. Если перебирать фирмы, то он тоже будет липить лишние записи.

Подскажите пожалуйста как мне быть
...
Рейтинг: 0 / 0
27.12.2002, 07:25
    #32085020
Jonyk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавить запрос от IN
используй select DISTINCT *
это позволит избавиться от дублированных строк фирм

select DISTINCT a.*, b.firmid as dfirmid from Firms a, Inord b where a.FirmId=b.FirmId

может так будет быстрей.
...
Рейтинг: 0 / 0
27.12.2002, 11:02
    #32085130
Помогите избавить запрос от IN
привет

Не понял постановки задачи, если честно

но подобные случаи с IN всегда (рефлекторно:) заменяю на EXISTS

Select *
From Firms F
WHERE exists(select * from inord i where i.firmid=F.firmid)
...
Рейтинг: 0 / 0
27.12.2002, 16:00
    #32085312
Babrow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавить запрос от IN
Спасибо за ответы.

2 Jonyk
По поводу Distinct - это я тоже пробовал. Работает гораздо медленнее.

2 Алексей Ковязин
По поводу Exists - это не пробовал. Этот запрос именно то, что мне надо, т.е. Мне нужно вывести список фирм, которые участвовали в приходе. От in хотел избавится, т.к., очевидно, что при нем идет natural по двум таблицам. Попробую с Exists может быть будет быстрее.
...
Рейтинг: 0 / 0
30.12.2002, 11:59
    #32085731
Николай X
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавить запрос от IN
А что join нельзя использовать?
Вот так например:

SELECT F.* FROM Firms F
JOIN Inord I ON I.FirmId = F.FirmId

Или я чего-то не понимаю?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите избавить запрос от IN / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]