如何仅在 SQL 中解码第一行

Posted

技术标签:

【中文标题】如何仅在 SQL 中解码第一行【英文标题】:How to Decode First Row Only in SQL 【发布时间】:2019-06-27 06:57:44 【问题描述】:

我有以下 SQL

Select decode(:lang_no, 1 , Local_Name , 2 , foreign_Name) Name from Table_Name; 

最后一条SQL检索大约几十万条记录,解码拖慢了检索速度,因为:Lang_no是一个参数(所有记录都一样)我想在这里告诉优化器解码第一行only , 所以如果:lang_no =1 不检查其他记录,直接返回Local_Name ,以此类推。

那么,是否有任何 Oracle 提示或其他调整想法可以提供帮助?

【问题讨论】:

你能告诉我们更多关于表、键、数据以及你如何实际使用这个查询的信息吗?解码速度不慢,几十万条记录也不算多。 你怎么知道是解码减慢了查询速度?我怀疑您实际上可以衡量该表达式的性能。 Oracle 不提供 动态投影,即 SQL 查询中的动态列名。您可以使用动态 SQL 来处理此类情况。 【参考方案1】:

您也许可以使用CASE 表达式?

Select CASE 
          WHEN :lang_no = 1 THEN decode(:lang_no, 1 , Local_Name , 2 , foreign_Name) 
          ELSE LocalName 
      END Name 
from Table_Name; 

【讨论】:

以上是关于如何仅在 SQL 中解码第一行的主要内容,如果未能解决你的问题,请参考以下文章

仅在包含另一个模式的另一行之后的第一次出现中替换包含模式的行

如何仅在列更改其值的情况下选择行(从第一行到最后一行)?

如何在数据工厂中获取 CSV 的第一行和第一列值?

如何仅在python selenium中获取第一层子元素

sql取排序后的第一行

Oracle PL/SQL如何连接一行和另一行中值的第一个字母