SQL名称优先级

SQL名称优先级,sql,standards-compliance,operator-precedence,Sql,Standards Compliance,Operator 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,因为内部表(m2)优先于外部表(m1)。然后,线路将是 where col2 = m1.col2 and c

出于好奇:在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,因为内部表(m2)优先于外部表(m1)。然后,线路将是

  where col2 = m1.col2 and col1 = 456

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

标准ANSI/ISO SQL的行为与此完全相同!(但我不能保证所有dbms产品都符合标准,因此我建议保留符合标准的产品。)

谢谢。我发现那些ISO/ANSI文档很难阅读,也找不到关于这个主题的任何注释。(你能引用其中的描述吗?)在EXISTS子句中,我通常限定所有列,因为我处理的是块内外的列,但在In子句中,我通常只处理内部表的列。很高兴知道我是在同意SQL标准的情况下这样做的。