У меня есть таблица с именем основной комбинации, возрастом, адресом, на основе комбинации мы должны найти идентификатор из таблицы DUMMY_TEST
.
И для этого идентификатора в таблице DUMMY_TEST
необходимополучить всю комбинацию имени, возраста и адреса, которая должна быть сопоставлена с таблицей DUMMY_ID_VALUE
, чтобы получить результат в столбце Valuee.
Требуется приведенный ниже ожидаемый результат, не присоединяясь к одной и той же таблице DUMMY_TEST
дважды, поскольку в ней миллионызаписи в реальном времени создаст проблему производительности.
Может кто-нибудь поможет создать запрос с хорошей производительностью без использования одной и той же таблицы дважды.
--table creation
CREATE TABLE DUMMY(NAME VARCHAR2(100),AGE VARCHAR2(100),ADDRESS VARCHAR2(100), ID VARCHAR2(100));
--data loading
INSERT INTO DUMMY VALUES('SAM','30','ITALY','100');
INSERT INTO DUMMY VALUES('RAGHU','20','VENICE','300');
INSERT INTO DUMMY VALUES('TOM','40','JAPAN','200');
CREATE TABLE DUMMY_TEST(NAME VARCHAR2(100),AGE VARCHAR2(100),ADDRESS VARCHAR2(100), ID VARCHAR2(100));
INSERT INTO DUMMY_TEST VALUES('SAM','30','ITALY','100');
INSERT INTO DUMMY_TEST VALUES('TOM','40','JAPAN','200');
INSERT INTO DUMMY_TEST VALUES('BROSNAN','20','INDIA','100');
INSERT INTO DUMMY_TEST VALUES('ARJUN','30','AMERICA','200');
INSERT INTO DUMMY_TEST VALUES('SAMUEL','40','BERLIN','100');
INSERT INTO DUMMY_TEST VALUES('RAM','60','GERMANY','200');
--table creation
CREATE TABLE DUMMY_ID_VALUE(ID VARCHAR2(100),VALUEE VARCHAR2(100));
--data loading
INSERT INTO DUMMY_ID_VALUE VALUES(100,'INCLUDED');
INSERT INTO DUMMY_ID_VALUE VALUES(200,'exclueded');
INSERT INTO DUMMY_ID_VALUE VALUES(300,'PARTIAL');
Запрос
SELECT DT.NAME,DT.AGE,DT.ADDRESS,DT.ID,DUMMY_ID_VALUE.VALUEE
FROM DUMMY
LEFT OUTER JOIN DUMMY_TEST A
ON DUMMY.NAME = A.NAME AND DUMMY.AGE = A.AGE AND DUMMY.ADDRESS = A.ADDRESS
LEFT OUTER JOIN DUMMY_TEST DT
ON DT.ID = A.ID
INNER JOIN DUMMY_ID_VALUE
ON DUMMY_ID_VALUE.ID = DT.ID;
Фактический результат
NAME AGE ADDRESS ID VALUEE
---------------------------------
SAM 30 ITALY 100 INCLUDED
BROSNAN 20 INDIA 100 INCLUDED
SAMUEL 40 BERLIN 100 INCLUDED
Ожидаемый результат:
NAME AGE ADDRESS ID VALUEE
---------------------------------
SAM 30 ITALY 100 INCLUDED
BROSNAN 20 INDIA 100 INCLUDED
SAMUEL 40 BERLIN 100 INCLUDED
RAGHU 20 VENICE 300 PARTIAL