【问题标题】:SQL name precedenceSQL 名称优先级
【发布时间】:2015-03-07 15:15:04
【问题描述】:

只是出于好奇: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 吗? IE。我可以依靠此查询在任何符合标准的 dbms 中工作吗?或者这只是 Oracle(可能还有大多数其他 dbms)提供的便利性增强功能?

【问题讨论】:

    标签: sql standards-compliance operator-precedence


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我发现那些 ISO/ANSI 文档很难阅读,也找不到关于这个主题的任何注释。 (你能从那里引用一些描述它的东西吗?)在 EXISTS 子句中,我通常限定所有列,因为我同时处理块内部和外部的列,但在 IN 子句中,我通常只使用内部表的列不合格.很高兴知道我这样做符合 SQL 标准。
    猜你喜欢
    • 2013-05-06
    • 2014-11-25
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    相关资源
    最近更新 更多