【问题标题】:SQL how to append columns to a single-row result set?SQL如何将列附加到单行结果集中?
【发布时间】:2013-06-30 05:38:08
【问题描述】:

问题源于需要返回值,需要返回将用于 Web 服务的单行结果集。

例如,如果我有一个 select 语句,它当前返回一个包含 3 列和 1 行的结果集,有没有办法在它自己的列中“附加”一个值?新值可以是任意选择的结果,它只返回一行。

select a, b, c from d where a = 'id' 给了

col1   col2   col3
  a      b      c

新的选择应该给出:

col1   col2   col3   col4
  a      b      c    *NEW*

在这种情况下,任意用于表示不一定与原始 select 语句中的任何值或表相关。

我想知道如何在 Oracle 中执行此操作,但希望有一个使用标准 SQL 功能的解决方案,以便大多数数据库都能处理它。

编辑:NEW 不是指字符串字面量“NEW”,而是指我想“追加”的新 select 语句的结果。

【问题讨论】:

  • 这听起来很奇怪,如果您需要这样做,我会质疑您的数据库架构设计。
  • 此查询旨在用于需要单行值的 Web 服务。
  • 好的,但是为什么你需要在同一个查询中包含这些值。您可以在数据库中查询此数据并在对客户端的响应中以您想要的方式表示它?
  • 这就是重点——避免在这个查询的中间层有任何东西。
  • 好吧,那么你没有网络服务,你只有一个直接调用数据库的客户端。当您说您将此查询用于 Web 服务时,这会让我认为您有一个 Web 服务,您可以通过该 Web 服务将此数据提供给服务客户端。

标签: mysql sql sql-server oracle


【解决方案1】:

如果你想要一个新的 select 语句,你可以通过两种方式来实现。一个是select 中的select:

select col1, col2, col3, 
       (select 'NEW' from d limit 1) as col4
from d

另一个是cross join:

 select d.col1, d.col2, d.col3, const.col4
 from d cross join
      (select 'NEW' as col4 from d limit 1) const

我使用一个简单的子查询作为示例。我假设您的子查询有点复杂。

【讨论】:

    【解决方案2】:

    这种类型的结构会起作用。请注意,当有不止一行时,您将获得交叉连接。

    select a,b,c,d
    from ( select a,b,c from dual )
    , (select d from dual )
    

    【讨论】:

      【解决方案3】:
      select
          a, b, c,
          (select smth from table2 limit 1) as col4 as col4
      from d where a = 'id'
      

      第二个查询应该只返回一行一列

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-06
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        相关资源
        最近更新 更多