Приведенные таблицы 1 и Таблица 2, как показано ниже, как вернуть результаты, показанные ниже?Как присоединиться к родительским и дочерним таблицам, чтобы получить следующее с помощью SQL или HQL
TABLE1
TBL1_PK TBL1_COL2
1 A
TABLE2
TBL2_PK TABLE1_FK ROLE_CD FIRST_NAME LAST_NAME
1 1 ROLE_1 DEF GHI
2 1 ROLE_2 JKL MNP
3 1 ROLE_3 RST UVW
RESULSET
TBL1_COL2 ROLE_1_FIRST_NAME ROLE1_LAST_NAME ROLE_2_FIRST_NAME ROLE_2_LAST_NAME
A DEF GHI JKL MNP
Подход Майка работал для меня. Всем спасибо. выберите T1.TBL1_COL2 как "TBL1_COL2", T2R1.FIRST_NAME как "ROLE_1_FIRST_NAME" T2R1.LAST_NAME как "ROLE_1_LAST_NAME", T2R2.FIRST_NAME как "ROLE_2_FIRST_NAME", T2R2.LAST_NAME как "ROLE_2_LAST_NAME" от Table1 как T1 внутреннее соединение Table2 в T2R1 на T1.TBL1_PK = T2R1.TABLE1_FK внутреннее соединение Table2 в T2R2 на T1.TBL1_PK = T2T2.TABLE1_FK где T2R1.role_cd = 'ROLE_1' и T2R2.role_cd = 'ROLE_2' –
Это неэффективный подход. Вторая таблица читается дважды. Вам не нужно читать дважды – GurV
Эффективность зависит от многих факторов. Любой оптимизатор будет читать таблицу с диска только один раз. Если вся таблица кэшируется в памяти, может вообще не читаться диск. После этого возникает вопрос, будет ли 4 оператора case и агрегация быстрее, чем дополнительный поиск первичного ключа и 2 сравнения равенства. Я буду держать пари, как обычно, ответ «это зависит». Если это критически важный запрос, когда время и процессор важны, я бы предложил проверить оба. Если нет, я предлагаю работать в зависимости от того, что легче понять и сохранить. –