#sql #oracle
Вопрос:
Я хочу, чтобы внутреннее соединение происходило только в том случае, если в таблице, подлежащей «внутреннему соединению», есть строка, имеющая ссылку на строку в основной таблице (ту, которую я буду использовать в FROM
выражении), как я могу это сделать ?
это мой вопрос:
SELECT DISTINCT IT_AC.DS_OBSERVACAO_GERAL, IT_AC.SN_ATENDIDO, IT_AC.SN_ENCAIXE,
IT_AC.CD_IT_AGENDA_CENTRAL,IT_AC.CD_AGENDA_CENTRAL, IT_AC.HR_AGENDA, IT_AC.CD_USUARIO AS "CREATED_BY",
IT_AC.CD_ITEM_AGENDAMENTO, PACI.NR_CPF, PACI.NM_PACIENTE,PACI.CD_PACIENTE,PRT.NM_PRESTADOR,PRT.CD_PRESTADOR,
PACI.NR_CELULAR,PACI.NR_FONE,PACI.NR_DDD_CELULAR,PACI.NR_DDD_FONE,
CON.NM_CONVENIO,CON.CD_CONVENIO, IT_AG.DS_ITEM_AGENDAMENTO, ESP.DS_ESPECIALID,ESP.CD_ESPECIALID, TIP_MAR.DS_TIP_MAR, TIP_MAR.CD_TIP_MAR,LOG_O_A_C.TP_OPERACAO
FROM IT_AGENDA_CENTRAL IT_AC
INNER JOIN AGENDA_CENTRAL AC
ON AC.CD_AGENDA_CENTRAL = IT_AC.CD_AGENDA_CENTRAL
INNER JOIN PACIENTE PACI
ON IT_AC.CD_PACIENTE = PACI.CD_PACIENTE
INNER JOIN PRESTADOR PRT
ON AC.CD_PRESTADOR = PRT.CD_PRESTADOR
INNER JOIN ITEM_AGENDAMENTO IT_AG
ON IT_AG.CD_ITEM_AGENDAMENTO = IT_AC.CD_ITEM_AGENDAMENTO
INNER JOIN ESP_MED
ON ESP_MED.CD_PRESTADOR = AC.CD_PRESTADOR
INNER JOIN ESPECIALID ESP
ON ESP.CD_ESPECIALID = ESP_MED.CD_ESPECIALID
INNER JOIN CONVENIO CON
ON CON.CD_CONVENIO = IT_AC.CD_CONVENIO
INNER JOIN TIP_MAR
ON TIP_MAR.CD_TIP_MAR = IT_AC.CD_TIP_MAR
INNER JOIN LOG_OPERA_AGENDA_CENTRAL LOG_O_A_C
ON IT_AC.CD_IT_AGENDA_CENTRAL = LOG_O_A_C.CD_IT_AGENDA_CENTRAL
WHERE PACI.NR_CPF = ${stringCPF}
ORDER BY TRUNC(IT_AC.HR_AGENDA) ASC
OFFSET ${offset} ROWS FETCH NEXT ${limit} ROWS ONLY
не все строки в IT_AC
имеют ссылку на строку в LOG_O_A_C
, но даже если я хочу их получить. Как я могу это сделать ?
Комментарии:
1. Вы имеете в виду ВНЕШНЕЕ СОЕДИНЕНИЕ?
Ответ №1:
вам нужно использовать «внешнее соединение»:
SELECT
DISTINCT IT_AC.DS_OBSERVACAO_GERAL,
IT_AC.SN_ATENDIDO,
IT_AC.SN_ENCAIXE,
IT_AC.CD_IT_AGENDA_CENTRAL,
IT_AC.CD_AGENDA_CENTRAL,
IT_AC.HR_AGENDA,
IT_AC.CD_USUARIO AS "CREATED_BY",
IT_AC.CD_ITEM_AGENDAMENTO,
PACI.NR_CPF,
PACI.NM_PACIENTE,
PACI.CD_PACIENTE,
PRT.NM_PRESTADOR,
PRT.CD_PRESTADOR,
PACI.NR_CELULAR,
PACI.NR_FONE,
PACI.NR_DDD_CELULAR,
PACI.NR_DDD_FONE,
CON.NM_CONVENIO,
CON.CD_CONVENIO,
IT_AG.DS_ITEM_AGENDAMENTO,
ESP.DS_ESPECIALID,
ESP.CD_ESPECIALID,
TIP_MAR.DS_TIP_MAR,
TIP_MAR.CD_TIP_MAR,
LOG_O_A_C.TP_OPERACAO
FROM
IT_AGENDA_CENTRAL IT_AC
INNER JOIN AGENDA_CENTRAL AC ON AC.CD_AGENDA_CENTRAL = IT_AC.CD_AGENDA_CENTRAL
INNER JOIN PACIENTE PACI ON IT_AC.CD_PACIENTE = PACI.CD_PACIENTE
INNER JOIN PRESTADOR PRT ON AC.CD_PRESTADOR = PRT.CD_PRESTADOR
INNER JOIN ITEM_AGENDAMENTO IT_AG ON IT_AG.CD_ITEM_AGENDAMENTO = IT_AC.CD_ITEM_AGENDAMENTO
INNER JOIN ESP_MED ON ESP_MED.CD_PRESTADOR = AC.CD_PRESTADOR
INNER JOIN ESPECIALID ESP ON ESP.CD_ESPECIALID = ESP_MED.CD_ESPECIALID
INNER JOIN CONVENIO CON ON CON.CD_CONVENIO = IT_AC.CD_CONVENIO
INNER JOIN TIP_MAR ON TIP_MAR.CD_TIP_MAR = IT_AC.CD_TIP_MAR
LEFT OUTER JOIN LOG_OPERA_AGENDA_CENTRAL LOG_O_A_C ON IT_AC.CD_IT_AGENDA_CENTRAL = LOG_O_A_C.CD_IT_AGENDA_CENTRAL
WHERE
PACI.NR_CPF = $ { stringCPF }
ORDER BY
TRUNC(IT_AC.HR_AGENDA) ASC OFFSET $ { offset } ROWS FETCH NEXT $ {
limit
} ROWS ONLY