IMPLICIT 和 EXPLICIT 连接
IMPLICIT and EXPLICIT join
我正在尝试重写以下代码:
W_WHERE := ' PD.NIF(+) = p.NIF and pd.num_colegiado(+) = p.num_colegiado AND PD.FECHA_INICIO(+) <= SYSDATE
AND NVL(PD.FECHA_FIN(+), SYSDATE) >= SYSDATE AND D.ID_DIRECCION(+) = PD.ID_DIRECCION AND p.num_colegiado = coleg.num_colegiado';
转换成正常的 JOIN 表示法,有人可以帮我吗?
PS。 PD 代表 PERSONA_DIRECCION table,P 代表 PERSONA table
这里没有任何暗示。在 Oracle 中,“(+) =”是一个 "normal JOIN notation"(如您所说)用于外部连接。如果你不想外连接,只需删除 (+)。
请参阅 this SO answer 了解说明。
显式联接的名称来自明确指定您在 table 上使用的联接类型(CROSS JOIN、INNER JOIN、LEFT OUTER JOIN 等)
因此您必须重新编写查询,以便将 FROM 子句中以逗号分隔的 table 替换为显式联接(此处为 INNER JOIN 和 LEFT JOIN)。然后将您的连接条件移动到有问题的 ON 子句:
select ...
from colleg
inner join p on p.num_colegiado = coleg.num_colegiado
left join pd on pd.nif = p.nif and
pd.num_colegiado = p.num_colegiado and
pd.fecha_inicio <= sysdate and
nvl(pd.fecha_fin, sysdate) >= sysdate
left join d on d.id_direccion = pd.id_direccion;
我正在尝试重写以下代码:
W_WHERE := ' PD.NIF(+) = p.NIF and pd.num_colegiado(+) = p.num_colegiado AND PD.FECHA_INICIO(+) <= SYSDATE
AND NVL(PD.FECHA_FIN(+), SYSDATE) >= SYSDATE AND D.ID_DIRECCION(+) = PD.ID_DIRECCION AND p.num_colegiado = coleg.num_colegiado';
转换成正常的 JOIN 表示法,有人可以帮我吗?
PS。 PD 代表 PERSONA_DIRECCION table,P 代表 PERSONA table
这里没有任何暗示。在 Oracle 中,“(+) =”是一个 "normal JOIN notation"(如您所说)用于外部连接。如果你不想外连接,只需删除 (+)。
请参阅 this SO answer 了解说明。
显式联接的名称来自明确指定您在 table 上使用的联接类型(CROSS JOIN、INNER JOIN、LEFT OUTER JOIN 等)
因此您必须重新编写查询,以便将 FROM 子句中以逗号分隔的 table 替换为显式联接(此处为 INNER JOIN 和 LEFT JOIN)。然后将您的连接条件移动到有问题的 ON 子句:
select ...
from colleg
inner join p on p.num_colegiado = coleg.num_colegiado
left join pd on pd.nif = p.nif and
pd.num_colegiado = p.num_colegiado and
pd.fecha_inicio <= sysdate and
nvl(pd.fecha_fin, sysdate) >= sysdate
left join d on d.id_direccion = pd.id_direccion;