powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Переписать запрос
2 сообщений из 2, страница 1 из 1
Переписать запрос
    #39537755
PartitionOuterJoin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде как красиво через partition join делалось, но не вспомню как.
Есть два набора.
Надо из первого набора вывести все записи, если во втором наборе нет данных
или сджойнить его по id со вторым набором, если во втором есть данные.
...
Рейтинг: 0 / 0
Переписать запрос
    #39537770
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PartitionOuterJoinВроде как красиво через partition join делалось, но не вспомню как.
Есть два набора.
Надо из первого набора вывести все записи, если во втором наборе нет данных
или сджойнить его по id со вторым набором, если во втором есть данные.Соединяя так или иначе надо знать сколько строк в t2.

Цель сделать красиво меньше букв или эффективно?

Если первое - можно играться с латералами. Первый случай merge join, второй - NL.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select t1.*
  from t1, lateral (select t2.*, count(*) over() cnt from t2 /*where 1 = 0*/)(+) t2
 where cnt is null or t1.id = t2.id;

select t1.*
  from (select t2.*, count(t2.rowid) over() cnt
          from dual, lateral (select * from t2 /*where 1 = 0*/)(+) t2) t2,
       t1
 where cnt = 0
    or t2.id = t1.id;



Если второе - union all. Будет HJ или full scan в зависимости от.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select t1.*
  from t1, t2
 where t2.id = t1.id
   and 1 = (select count(*) from t2 where rownum = 1)
union all
select t1.*
  from t1
 where 0 = (select count(*) from t2 where rownum = 1);
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Переписать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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