我刚刚被转移到新的工作地点,并获得一套正在运作的sqls。有几个sqls写得像下面的[A]。对我来说看起来很奇怪的是,表的别名与表名本身相同。请允许我问你关于[A]的两个问题。
adapter.setDropDownViewResource(android.R.layout.your_custom_created_view);
Q1。 [A]中的提示条款是否有效?我知道[C]中的hint子句是无效的,因为使用表名而不是hint子句中的别名,尽管[B]中的那个是有效的。
Q2。为表提供与其名称相同的别名有什么好处吗?
提前感谢您对在新环境中独自工作的oracle初学者的慷慨支持。
答案 0 :(得分:2)
是的,第一个提示似乎在语法上有效(尽管可能是您可以自己测试),假设IDX01
是TableA
上存在的索引并且查询可以使用那个指数。我不喜欢在生产代码中使用这种提示,因为它通常意味着你试图掩盖统计数据的潜在问题,但它似乎是有效的。
使用与表名匹配的别名没有任何问题。有人可能添加了别名以使提示有效,或者因为查询最初没有别名而且select
列表或where
子句中的某些列使用了{{1} } 句法。当然,我们可以推测其他可能性。您组织中的某个人可能知道更多的历史记录或源代码控制可能会显示进化。
答案 1 :(得分:0)
我只想回答你的第二个问题。提供与表名相同的别名是绝对可以的,绝对没有必要这样做。它没有增加清晰度,您仍然可以使用table_name.column_name
语法而不使用别名。
答案 2 :(得分:0)
由于我们强制数据库使用提供的索引,因此为了使提示有效,您必须在提示中指定表别名或表名。像下面的sql片段。否则,提示中的指定索引索引将被取消。
select /*+ INDEX(a IDX01) */ from TableA a
或
select /*+ INDEX(TableA IDX01) */ from TableA TableA