'Saltarse' se une a una tabla en SQL interno
-
20-09-2019 - |
Pregunta
Lo que quiero decir es, si tuviera el siguiente esquema:
create table tableA(
A_id number not null primary key
);
create table tableB(
B_id number not null primary key,
A_id number not null references tableA(A_id),
B_data text not null
);
create table tableC(
C_id number not null primary key,
A_id number not null references tableA(A_id),
C_data text not null
);
Si quería recuperar B_data
y C_data
usando las relaciones descritas aquí, ¿hay alguna diferencia entre lo siguiente:
select
b.B_data,
c.C_data
from
tableB b
inner join tableC c
on b.A_id = c.A_id;
y
select
b.B_data,
c.C_data
from
tableB b
inner join tableA a
on b.A_id = a.A_id
inner join tableC c
on a.A_id = c.A_id;
Sospecho que la mayoría de las bases de datos se optimizan o bien consulta a ser el mismo, pero ¿hay casos en los que las restricciones de clave externa a tableA
hará unirse a través de tableA
mucho más eficiente? ¿Hay casos en los que estas consultas podrían producir resultados diferentes?
Solución
Es posible que así unirse a ellos directamente. restricciones de clave externa no hacen nada para que se une más eficiente; índices que hacen, que (según el DBMS) puede ser una cuestión separada de claves externas. De cualquier manera, si hay un índice de trabajar, lo tienes, independientemente de si se va por su clave externa.
Otros consejos
La primera versión funciona bien. relaciones de clave externa son acerca de la integridad referencial y no necesariamente tiene que ser atravesado como se definen.