Oracle - select 语句别名一列和通配符以获取所有剩余列
Oracle - select statement alias one column and wildcard to get all remaining columns
SQL 的新手。如果这个问题是一个基本问题,请原谅。有没有办法让我在下面做到这一点
SELECT COLUMN1 as CUSTOM_NAME, <wildcard for remaining columns as is> from TABLE;
我只希望 COLUMN1 在最终结果中出现一次
无法用常规 SQL* 制作那种动态 SELECT list。
这是一件好事。编程越动态,就越困难。即使是简单的 *
语法,虽然在许多情况下都很有用,但也会在生产代码中引起问题。 Oracle SQL 语法已经比大多数传统编程语言复杂,添加一点元语言来描述查询 return 可能是一场噩梦。
*嗯,您 可以 使用 Oracle data cartridge, or DBMS_XMLGEN, or a trick with the PIVOT clause 创建一些东西。但是这些解决方案中的每一个都将非常复杂,而且肯定不像键入列那么简单。
这与您所能达到的差不多。
将重要的列放在前面非常方便,
同时可以根据需要滚动到其他人。 COLUMN1 最终会在那里出现两次。
SELECT COLUMN1 as CUSTOM_NAME,
aliasName.*
FROM TABLE aliasName;
如果您有很多列,可能值得自动生成完整的列列表而不是依赖 * selector.
因此,分两步的方法是生成具有自定义前 N 列和其他列未指定顺序的列列表,然后在您的实际 select 语句中使用此生成的列表。
-- select comma separated column names from table with the first columns being in specified order
select
LISTAGG(column_name, ', ') WITHIN GROUP (
ORDER BY decode(column_name,
'FIRST_COLUMN_NAME', 1,
'SECOND_COLUMN_NAME', 2) asc) "Columns"
from user_tab_columns
where table_name = 'TABLE_NAME';
将TABLE_NAME
、FIRST_COLUMN_NAME
和SECOND_COLUMN_NAME
替换为您的真实姓名,根据需要调整显式列列表。
然后执行查询并使用结果,应该类似于
FIRST_COLUMN_NAME, SECOND_COLUMN_NAME, OTHER_COLUMN_NAMES
当然,这对于 5 列左右的开销来说是开销,但是如果您曾经 运行 进入具有 3 位数列的公司数据库,这可能会很有趣。
SQL 的新手。如果这个问题是一个基本问题,请原谅。有没有办法让我在下面做到这一点
SELECT COLUMN1 as CUSTOM_NAME, <wildcard for remaining columns as is> from TABLE;
我只希望 COLUMN1 在最终结果中出现一次
无法用常规 SQL* 制作那种动态 SELECT list。
这是一件好事。编程越动态,就越困难。即使是简单的 *
语法,虽然在许多情况下都很有用,但也会在生产代码中引起问题。 Oracle SQL 语法已经比大多数传统编程语言复杂,添加一点元语言来描述查询 return 可能是一场噩梦。
*嗯,您 可以 使用 Oracle data cartridge, or DBMS_XMLGEN, or a trick with the PIVOT clause 创建一些东西。但是这些解决方案中的每一个都将非常复杂,而且肯定不像键入列那么简单。
这与您所能达到的差不多。 将重要的列放在前面非常方便, 同时可以根据需要滚动到其他人。 COLUMN1 最终会在那里出现两次。
SELECT COLUMN1 as CUSTOM_NAME,
aliasName.*
FROM TABLE aliasName;
如果您有很多列,可能值得自动生成完整的列列表而不是依赖 * selector.
因此,分两步的方法是生成具有自定义前 N 列和其他列未指定顺序的列列表,然后在您的实际 select 语句中使用此生成的列表。
-- select comma separated column names from table with the first columns being in specified order
select
LISTAGG(column_name, ', ') WITHIN GROUP (
ORDER BY decode(column_name,
'FIRST_COLUMN_NAME', 1,
'SECOND_COLUMN_NAME', 2) asc) "Columns"
from user_tab_columns
where table_name = 'TABLE_NAME';
将TABLE_NAME
、FIRST_COLUMN_NAME
和SECOND_COLUMN_NAME
替换为您的真实姓名,根据需要调整显式列列表。
然后执行查询并使用结果,应该类似于
FIRST_COLUMN_NAME, SECOND_COLUMN_NAME, OTHER_COLUMN_NAMES
当然,这对于 5 列左右的开销来说是开销,但是如果您曾经 运行 进入具有 3 位数列的公司数据库,这可能会很有趣。