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

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

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

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

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

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

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

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

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

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

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

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

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


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