【问题标题】:SQL - Create table from Select + user defined columns and valuesSQL - 从 Select + 用户定义的列和值创建表
【发布时间】:2015-02-07 10:24:02
【问题描述】:

目前我有以下 SELECT 语句:

CREATE TABLE  TEST AS
SELECT ROW_ID,
            PROM_INTEG_ID,
            INTEGRATION_ID,
            BILL_ACCNT_ID,
            SERV_ACCT_ID,
            CFG_STATE_CD   
FROM PRODUCTS
WHERE PROD_ID = 'TestProduct'
AND STATUS_CD = 'Active';

但是我必须添加一些在 PRODUCTS 表中不存在的附加列并用我自己的名称定义它们。例如 HIERARCHY

我尝试在我的 SQL 查询中使用 WITH 操作数,但由于语法错误,它一直失败。

    CREATE TABLE  TEST AS
SELECT ROW_ID,
            PROM_INTEG_ID,
            INTEGRATION_ID,
            BILL_ACCNT_ID,
            SERV_ACCT_ID,
            CFG_STATE_CD   
            WITH
                  PRODUCT_HEIRARCHY varchar2(30)  'Test123Value'
FROM PRODUCT
WHERE PROD_ID = 'TestProduct'
AND STATUS_CD = 'Active';

总而言之,我想从现有表中提取列并定义我自己的一些列。

任何帮助表示赞赏

【问题讨论】:

    标签: sql oracle create-table


    【解决方案1】:

    也可以使用CTE,即众所周知的WITH clause,也可以使用create table。

    CREATE TABLE t
    AS 
    WITH data AS ( 
       SELECT...
    ) 
    SELECT * 
    FROM data
    

    【讨论】:

    • 你能拼出查询来回答问题吗?
    • @Mr_and_Mrs_D OP 没有发布他想要添加到选择中的其他列和表的详细信息。所以,我假设他必须加入其他表并使用表别名在列列表中引用它们。所有这些都将放在 WITH 子句中。
    • 参见。 @Gordon 的回答
    【解决方案2】:

    只需将列添加到选择中:

    CREATE TABLE TEST AS 
        SELECT ROW_ID, PROM_INTEG_ID, INTEGRATION_ID, BILL_ACCNT_ID, SERV_ACCT_ID, CFG_STATE_CD,
               CAST('Test123Value' AS VARCHAR2(30)) as PRODUCT_HIERARCHY
        FROM PRODUCTS
        WHERE PROD_ID = 'TestProduct' AND STATUS_CD = 'Active';
    

    请注意,cast() 不是必需的。但是,如果您希望列具有特定类型,这是一个好主意。

    【讨论】:

    • 谢谢你,出于好奇,多表 SELECTS 的 WITH 运算符是什么?
    • 如果我们想要原始表中的所有列怎么办? SELECT *, CAST('Test123Value' AS VARCHAR2(30)) as PRODUCT_HIERARCHY 似乎不起作用 (ORA-00923: FROM keyword not found where expected)
    • 答案(我是 oracle 数据库的新手) - 我们不能单独使用*,我们需要表名:stackoverflow.com/questions/9727018/…
    • @Mr_and_Mrs_D 。 . .您将限定*: products.*。
    猜你喜欢
    • 2017-08-19
    • 1970-01-01
    • 2016-03-18
    • 2014-04-18
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多