首页 > 解决方案 > SQL:不支持选择 * - 从子查询中获取列名

问题描述

Showcase 是我使用的平台的供应商,它由位于我们数据库顶部的 Showcase 服务器和DB2用于降低DB2自身性能影响的中间层组成。Showcase Query 是他们的客户端应用程序和查询接口。它不支持Select *,我有数百个依赖于 *. 希望改用子查询:

Select (select COLUMN_NAME from sysibm.columns where TABLE_NAME='sometable')
From 'sometable'

然而,这会返回"Result of SELECT more than one row"。我需要将此代码重用于不同宽度的表,因此我不想通过索引指定列,任何帮助将不胜感激。

标签: sqldb2

解决方案


选择时,您必须为所有(在每个 DB AFAIK 中)指定列名或 *。

除了最简单的表之外,这可能会为所有表生成多于一行的错误。因为在 sometable 中有不止一列。

select COLUMN_NAME from sysibm.columns where TABLE_NAME='sometable'

要解决此问题,您必须向 where 子句添加更多条件

    select (
        select COLUMN_NAME from sysibm.columns where TABLE_NAME='sometable' and column_name = 'PARTS'
) 
from sometable.

推荐阅读