如何在oracle中基于多个table创建table

how to create table based on multiple table in oracle

所以我有多个 table,我想根据这些多个 table 中的所有列创建新的 table。但如果列名重复,则只取 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

如果多个 tables

中有相同的列名,如何只取一列

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

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

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

问题出在您的 SELECT 中,您的 al.*, rl.*, cs.* 显然您的 * 中某处有相同的列名。因此,您不能将此操作作为 1 的最小值,但可能是 2 tables。您需要解决的问题是展开 * 列出所有字段,例如 al.col1, al.col2 as alCol2。如果您的 table rl 也有 col2,现在您就没有问题了。但是如果你的 rlcs 至少有 col2,其中之一需要别名。

但是我建议,在这种情况下展开所有列

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

如果唯一的重复名称来自 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;

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