You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle新手求助:如何用表A和表B创建表C?

Oracle基于表A、表B创建表C的实现思路与代码

根据不同业务需求,常见的创建方式分为以下几种:

1. 关联表A和表B的数据创建表C

如果表A和表B存在关联字段(比如共同的ID),要把两张表的关联数据整合到新表C中,用CREATE TABLE ... AS SELECT(简称CTAS)语句最直接:

示例代码(直接创建带数据的表)

-- 假设A和B通过product_id关联,选择A的所有列+B的指定列创建表C
CREATE TABLE C AS
SELECT A.*, B.product_name, B.price
FROM A
INNER JOIN B ON A.product_id = B.product_id;

若需要手动添加约束(比如主键)

如果要给表C加主键、非空等约束,建议先定义表结构再插入数据:

-- 先定义表C的结构和约束
CREATE TABLE C (
    order_id NUMBER PRIMARY KEY,
    customer_name VARCHAR2(100) NOT NULL,
    order_date DATE,
    product_name VARCHAR2(50),
    price NUMBER(10,2)
);

-- 插入A和B的关联数据
INSERT INTO C (order_id, customer_name, order_date, product_name, price)
SELECT A.order_id, A.customer_name, A.order_date, B.product_name, B.price
FROM A
INNER JOIN B ON A.product_id = B.product_id;

2. 合并表A和表B的同结构数据

如果表A和表B的字段结构完全一致,要把两张表的所有数据合并到表C中:

示例代码

-- 合并A、B所有数据(保留重复数据用UNION ALL,去重用UNION)
CREATE TABLE C AS
SELECT * FROM A
UNION ALL
SELECT * FROM B;

3. 仅复制表A和表B的结构(不含数据)

如果只需要表C拥有A和B的字段结构,不需要数据:

示例代码

-- 创建包含A和B所有字段的空表
CREATE TABLE C AS
SELECT A.*, B.*
FROM A
JOIN B ON 1 = 0; -- 1=0确保不会查询到任何数据

新手注意事项

  • 若A和B有同名字段,查询时要加别名区分,比如A.id AS a_id, B.id AS b_id,避免创建表时列名重复报错
  • CTAS创建的表不会继承原表的主键、外键、索引等约束,需要手动添加
  • 确保SELECT语句中列的数据类型兼容,避免创建表时出现类型不匹配的错误

内容的提问来源于stack exchange,提问作者Big Dream American

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:55:20