Переписать Oracle SQL Самостоятельный запрос - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть приведенные ниже пользователи и информация о сети в таблице USER. Я хотел бы получить всех пользователей для данного NetworkID.

ID  Name        Value      Owner
1   UserID      123        111
2   NetworkID   567        111
3   FName       ABC        111
4   LName       BCD        111
5   UserID      234        222
6   NetworkID   567        222
7   FName       DEF        222
8   LName       EFG        222
9   UserID      345        333
10  NetworkID   567        333
11  FName       GHI        333
12  LName       HIJ        333

Ниже приведен запрос Self Join, который я написал для достижения ожидаемого набора результатов

select distinct U1.value NetworkID
              , U2.value Users
from User U1
join User U2 on U2.owner = U1.owner and U2.name = 'UserID'
where U1.name = 'NetworkID' and U1.value = '567'

Ожидаемый результат

NetworkID   Users
567         123
567         234
567         345

Объем таблицы очень большой, и для получения результатов с помощью этого самостоятельного объединения требуется очень много времени. Исходя из ограничений БД, я не могу вносить изменения в существующую схему (добавление индексов). Мне нужно предложение о том, как этот запрос может быть эффективно переписан для достижения того же набора результатов.

1 Ответ

0 голосов
/ 15 апреля 2020

Ваш запрос в порядке:

select U1.value as NetworkID, U2.value Users
from User U1 join
     User U2
     on U2.owner = U1.owner and U2.name = 'UserID'
where U1.name = 'NetworkID' and U1.value = '567';

Для этого запроса вам нужны индексы (owner, name) и (name, value, owner).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...