SQL名称优先级

时间:2015-01-09 10:10:00

标签: 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 col1 = 456

仍然有效。这种行为是标准SQL吗?即我可以依赖此查询在任何标准兼容的dbms中工作吗?或者这只是Oracle提供的方便性增强(也可能是大多数其他dbms)?

1 个答案:

答案 0 :(得分:2)

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