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

Oracle SQL如何从两个无关联表取数插入目标数据表

你不需要给无关联关系的两表强行写关联条件,直接用CROSS JOIN(交叉连接)即可,另外注意不要直接用Oracle内置的ROWID伪列:这个值存储的是行的物理地址,是类似AAAR3xAAEAAAACXAAA的字符串,不是你需要的从1开始的连续数字序号,生成顺序号直接用ROWNUM就行。

根据你实际的业务需求,分两种实现方式:

方式1:生成两表全量组合(笛卡尔积)

如果需要SALE的每一条记录都和SELL的每一条记录配对插入(按你提供的测试数据,最终会插入5*5=25条记录),直接执行以下语句即可:

INSERT INTO SALE_DETAIL(S_SALE,S_NUMBER,S_ARTICLE,S_COUNT)
SELECT 
  s.SALE_ID,
  ROWNUM S_NUMBER,
  d.SELL_ARTICLE,
  d.SELL_COUNT 
FROM SALE s 
CROSS JOIN SELL d;

执行后S_NUMBER会自动从1开始连续递增,完全匹配你的字段映射规则。

方式2:两表按行顺序一一配对

如果需要SALE和SELL按行顺序一一对应插入(比如SALE第1行配SELL第1行,按测试数据最终插入5条记录),需要注意:关系型数据库的表是无序集合,没有默认的“第几行”概念,必须先给两个表分别生成行号,再按行号关联。如果没有特殊排序要求,可以按数据库默认读取顺序生成行号,语句如下:

INSERT INTO SALE_DETAIL(S_SALE,S_NUMBER,S_ARTICLE,S_COUNT)
SELECT 
  s.SALE_ID,
  s.rn S_NUMBER,
  d.SELL_ARTICLE,
  d.SELL_COUNT 
FROM (
  SELECT SALE_ID, ROWNUM rn FROM SALE
  -- 若需要固定顺序,加ORDER BY,比如ORDER BY SALE_ID
) s
JOIN (
  SELECT SELL_ARTICLE, SELL_COUNT, ROWNUM rn FROM SELL
  -- 若需要固定顺序,加ORDER BY,比如按插入顺序需要有时间字段做排序依据
) d
ON s.rn = d.rn;

提示:如果子查询不加ORDER BY明确排序规则,数据库返回行的顺序不固定,无法保证和你插入数据的顺序一致,建议根据业务逻辑补充排序条件。


内容的提问来源于stack exchange,提问作者PIJUS_MAGNIFICUS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:39:19