powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / возможно ли описать через join ?
5 сообщений из 5, страница 1 из 1
возможно ли описать через join ?
    #39152055
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть таблица А и Б связаны между собой по одноименному полю a.a=b.a

возможно ли сделать такой селект
Код: sql
1.
2.
select a.* from a ??? join b on a.a=b.a
where ???

или
Код: sql
1.
2.
select a.* from b ??? join a on a.a=b.a
where ???


чтобы из таблицы А брались все значения, если таблица Б пустая, либо из Таблицы А брались только те значения как при inner join

но без использования union ?
...
Рейтинг: 0 / 0
возможно ли описать через join ?
    #39152077
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH A (a,b) AS (VALUES (1::int ,2::int)
,(2::int ,2::int)
,(3::int ,2::int)
)
,b as (SELECT * FROM a where null)
--,b as (SELECT * FROM a where a.a=3)
SELECT * FROM a
LEFT JOIN b ON
	(a.a=b.a)
WHERE 
	(a.a=b.a
		OR (SELECT count(1) from b) =0
	)


...
Рейтинг: 0 / 0
возможно ли описать через join ?
    #39152096
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) qwwq, дело в том что таблица А весит пару десятков гигов
и если джоинить к А таблицу Б то получается что мы всеравно перебираем много вариантов из А и потом отсекаем от А все что дает/недает нам Б

2) есть возможность переписать этот же запрос так что бы не к А джоинили Б а наобборот сперва Б а потом к нему А ?

3) или я в первом утверждении ошибаюсь?
...
Рейтинг: 0 / 0
возможно ли описать через join ?
    #39152134
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

предыдущий ответ отвечает на ваш изначальный вопрос.
на ваш следующий вопрос исчерпывающе отвечает сакраментальное:
"а поцчему ви спгашиваити?"

с последующим разоблачением, что вы не то и не так решаете, и вообще занимаетесь не своим делом.

оно вам надо ?


таки если всё ещё надо -- сформулируйте задачу не с того конца, где вам кажется светлее, а так, как она изначально стоит -- и, возможно, кто--то подскажет реально хорошее решение.

Ибо кроме как загнать проверку наличия записей в b в IMMUTABLE и именно IMMUTALBE ф-ю -- т.е. заведомо попасться при наличии конкурентов -- я не вижу способа набмануть оптимайзер в вашейтекущей постановке. Если за наполнение b отвечает только ваш процесс, -- то подход допустимый. Если не только -- то нет.

в случае, если мн-во b --параметр, то вместо table b возможно удобнее взять ARRAY[row()::b,...] -- так как если array известен на входе то и array_length и уже иммутабна, и м.б. исчислена оптимайзером при составлении плана. (т.е. при непустоте оптимайзер выяснит, что задача сводится к INNER JOIN, и для маленькой b стартует от неё)
...
Рейтинг: 0 / 0
возможно ли описать через join ?
    #39152536
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushkaесть таблица А и Б связаны между собой по одноименному полю a.a=b.a

возможно ли сделать такой селект
Код: sql
1.
2.
select a.* from a ??? join b on a.a=b.a
where ???

или
Код: sql
1.
2.
select a.* from b ??? join a on a.a=b.a
where ???


чтобы из таблицы А брались все значения, если таблица Б пустая, либо из Таблицы А брались только те значения как при inner join

но без использования union ?

Код: sql
1.
2.
select a.* from a LEFT JOIN b on a.a=b.a
where ...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / возможно ли описать через join ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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