无公共关联列的table1、table2数据插入table3的SQL实现问题
解决方案
你需要的是两张表数据的无关联组合,不需要使用带关联条件的INNER JOIN,根据你的实际插入规则可以选以下两种方案:
方案1:插入所有hID和aID的全组合(笛卡尔积)
如果你的需求是把table1每一条的hID和table2每一条的aID都做配对插入table3,直接使用**交叉连接(CROSS JOIN)**即可,不需要写关联条件:
INSERT INTO table3 (hID, aID) SELECT t1.hID, t2.aID FROM table1 t1 CROSS JOIN table2 t2;
注意:该方案最终生成的插入数据量是table1行数 × table2行数,如果两张表数据量较大,会产生非常多的插入数据,执行前请确认符合你的业务预期。
方案2:按行顺序一一对应插入
如果你只需要table1和table2的行按顺序配对(比如第1行hID配第1行aID,第2行hID配第2行aID),可以用窗口函数给两张表加行号后关联:
INSERT INTO table3 (hID, aID) SELECT t1.hID, t2.aID FROM (SELECT hID, ROW_NUMBER() OVER(ORDER BY hID) AS row_num FROM table1) t1 INNER JOIN (SELECT aID, ROW_NUMBER() OVER(ORDER BY aID) AS row_num FROM table2) t2 ON t1.row_num = t2.row_num;
注意:该方案最终插入的数据量是两张表中行数更少的那一方的数量,超过的部分会被舍弃。
内容的提问来源于stack exchange,提问作者user16890274
相关产品推荐
相关产品推荐

