我的意思是,如果我有以下架构:
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
);
如果我想检索B_data
和C_data
使用此处描述的关系,以下之间是否有任何区别:
select
b.B_data,
c.C_data
from
tableB b
inner join tableC c
on b.A_id = c.A_id;
和:
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;
我怀疑大多数数据库会将任一查询优化为相同,但是在某些情况下,外键约束tableA
会使通过tableA
更有效地连接吗?是否存在这些查询可能产生不同结果的情况?