powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Пересечение таблиц при помощи PL/pgSQL
5 сообщений из 5, страница 1 из 1
Пересечение таблиц при помощи PL/pgSQL
    #32099907
Mixa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте.

В целом проблема такова - есть некоторая функция, которя получает уникальное значение некоторого поля в базе, по нему высчитывает значение другого поля в другой базе. В принципе ничего военного в этом нет, пару SQL - запросов. Соответствие жесткое - каждому - каждое. Вот захотелось мне сделать вот такой запрос:

Код: plaintext
SELECT * from t1, t2 where t1.f1 = my_func(t2.f2);


Ведь с моей точки зрения это практически тоже самое:

Код: plaintext
SELECT * from t1, t2 where t1.f1 = t2.f2;



И все работает вот только Postgre делает умножение таблиц, т.е. он сравнивает каждую запись t1 с каждой записью t2. Пока это тест, не страшно, но на больших объемах все ляжет.
...
Рейтинг: 0 / 0
Пересечение таблиц при помощи PL/pgSQL
    #32104957
XKiller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя функция возвращает одно значение, которое потом сравнивается со значениями в первой таблице. Сама функция, в принципе, тоже ищет по одному значению. Т.о. в первом случае (очень грубо) мы имеем a+b сравнений (а - кол-во записей в первой таблице, b - соответственно), а во втором случае, как правильно замечено, a*b. Так что здесь "практически то же самое" вряд ли подойдет :)
...
Рейтинг: 0 / 0
Пересечение таблиц при помощи PL/pgSQL
    #32106648
Mixa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет XKiller.
То есть я понимаю, что он сравнивает все со всеми, иначе он не работать не может, но зачем каждый вызывать функцию. Получить один раз значение и вперед. Причем все мои попытки ограничить как-нибудь, как у нас говорили в школе 20 лет назад , область определения функции не к чему не привели. Я хотел в начале обрезать набор записей, типа дата не меньше вчерашнего числа. Он по своему раставляет приоритеты в вычислении фразы WHERE .
Есть в определении функций какие-то атрибуты, но я не разобрался какие.
...
Рейтинг: 0 / 0
Пересечение таблиц при помощи PL/pgSQL
    #32106957
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Пересечение таблиц при помощи PL/pgSQL
    #32106958
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если использовать вложенный запрос, в котором вычислять значение функции, а потом объединять при помощи JOIN?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Пересечение таблиц при помощи PL/pgSQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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