【问题标题】:how to create table based on multiple table in oracleoracle中如何根据多个表创建表
【发布时间】:2021-06-24 03:11:51
【问题描述】:

所以我有多个表,我想根据这些多个表中的所有列创建新表。但如果列名重复,则只取 1 列。

我试图创建这样的查询:

CREATE TABLE schema_rr_dmt
  AS (SELECT al.*, rl.*, cs.*  FROM a_loans al INNER JOIN s_CUSTRLTNP rl 
ON al.id_nasabah = rl.id_nasabah INNER JOIN s_customer cs ON cs.id_nasabah = rl.enterprise_id);

但它变成了错误

[Error] Script lines: 8-10 -------------------------
 ORA-00957: duplicate column name
 Script line 9, statement line 2, column 22

如果多个表中的列名相同,如何只取一列

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper


    【解决方案1】:

    您必须枚举所需的每一列,而不是使用通配符快捷方式。例如,如果表 A_LOANS 和 S_CUSTOMERS 有一个名为 CUSTOMER_ID 的列,那么您将需要明确列出您想要的这两个表中的每一列...

    CREATE TABLE schema_rr_dmt
      AS (SELECT al.col1, al.col2, al.CUSTOMER_ID, etc...
    

    顺便说一句,您可以在 CTAS 中包含重复的列,但您需要为其提供一个别名以赋予其唯一名称。

    【讨论】:

    • 但是如果一张表中有很多列怎么办?这种方式是手动方式,有没有自动解决这个问题的方法?因为我要删除的只是具有相同名称的列。
    • 你必须这样做。现在您可以针对数据字典编写脚本以生成 CTAS,但您必须生成脚本以省略重复的列或消除它们的歧义
    【解决方案2】:

    如果唯一的重复名称来自join 键,那么using 可以解决您的问题:

    CREATE TABLE schema_rr_dmt AS
        SELECT *
        FROM a_loans al INNER JOIN
             s_CUSTRLTNP rl 
             USING (id_nasabah) INNER JOIN
             s_customer cs 
             ON id_nasabah = rl.enterprise_id;
    

    但是,如果有其他重复的列名,这将不起作用。

    【讨论】:

    • 根据我的实际情况,有3个表,第一个表是s_custrltnp,有8列,其中一个是kd_cabang,下一个是a_loans,有144列和一个该列是kd_kolek 下一个是s_customer,有63 列,其中有kd_kolekkd_cabang,我想使用inner join 从这些表中取出所有列,我可以using那些重复的列?
    • @FahriDzaky 。 . .正如本文所解释的,这仅在 using 子句中唯一重复的列是 join 键时才有效。
    【解决方案3】:

    问题出在你的SELECT 那里你有al.*, rl.*, cs.* 显然你在* 的某个地方有相同的列名。因此,您不能至少为 1 个,但可能是 2 个表。您需要解决此问题的是展开* 列出所有字段,如al.col1, al.col2 as alCol2。如果只有你的表 rl 也有 col2 现在你没有问题。但如果您的rlcs 至少有col2,则其中一个需要别名。

    不过,我建议在这种情况下展开所有列

    SELECT ... al.col2 as al_Col2, rl.col2 as rl_Col2, cs.col2 as cs_col2 ...` 
    

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      相关资源
      最近更新 更多