Ansi SQL 子查询
Posted
技术标签:
【中文标题】Ansi SQL 子查询【英文标题】:Ansi SQL subquery 【发布时间】:2018-01-09 17:01:23 【问题描述】:在特定的上下文中,我正在编写一个通用查询,它将在许多不同的 RDBMS(主要是 Oracle 和 Teradata)中执行,为了使这成为可能,我想按照 ANSI SQL 编写它,所以以下哪一项是一个有效的 ANSI SQL 查询:
select tab.* from (...) tab where 1=1
/* or */
select tab.* from (...) as tab where 1=1
【问题讨论】:
Second 在 Oracle 上不起作用。 两者都是有效的 ANSI SQL,as
关键字是可选的
@a_horse_with_no_name:那么为什么它不能在 lad2025 提到的 Oracle 上运行?
@54l3d lad2025 是正确的。表别名的 as
关键字在 oracle (see similar answer on this very site) 中是非法的。除非有一个实现有 as
关键字 mandatory 用于表别名,否则第一个语法将是要走的路。否则,恐怕你会蒙混过关。
@54l3d:因为 Oracle 并不总是遵循 SQL 标准。仅仅因为一个语句根据标准是有效的,并不意味着它可以在所有 DBMS 上运行
【参考方案1】:
您必须为所需的搜索使用字段名称
select tab.* from (...) tab where (..field name..)=1
【讨论】:
where 1=1
是有效的,即使在这种情况下无用。显然他的问题与 ANSI SQL 中 AS
关键字的使用有关,而不是他的查询是否有用。以上是关于Ansi SQL 子查询的主要内容,如果未能解决你的问题,请参考以下文章