SQL 名称优先级

SQL name precedence

出于好奇:SQL 标准中的列名是否有优先级?

我们来查询一下:

select * from mytable m1
where col1 = 123
and exists
(
  select * from mytable m2
  where m2.col2 = m1.col2 and m2.col1 = 456
);

在 Oracle 中,我可以省略 col1 和 col2 上的限定符 m2,因为内部 table (m2) 优先于外部 table (m1)。该行将是

  where col2 = m1.col2 and col1 = 456

而且还在工作。这种行为标准SQL吗? IE。我可以依赖此查询在任何符合标准的 dbms 中工作吗?或者这只是 Oracle(可能还有大多数其他 dbms)提供的便利增强功能?

标准 ANSI/ISO SQL 的行为完全一样! (但我不能保证所有的dbms产品都符合标准,所以我建议保持排位赛。)