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产品都符合标准,所以我建议保持排位赛。)
出于好奇: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产品都符合标准,所以我建议保持排位赛。)