用于插入新表的Oracle嵌套选择循环

用于插入新表的Oracle嵌套选择循环,oracle,Oracle,我试图找到一种简单(ish)的方法,从3个表中选择结果,并从每个选择中获取返回的列,然后将它们全部插入第4个表中,该表将作为基于typeId、manufacturerId和locationId的可用性“查找矩阵” 例如,如果有10个TYPEID和5个MANUFACTURERID,并且说3个LOCATIONID,我会在表4中插入10x5x3so150行 表1、2和3之间没有直接联系,它们只是产品类型、制造商和地点的独立表。 稍后,在表4中会有一个“标志”列来确定哪个可用性为真/假 类似这样,但我不

我试图找到一种简单(ish)的方法,从3个表中选择结果,并从每个选择中获取返回的列,然后将它们全部插入第4个表中,该表将作为基于typeId、manufacturerId和locationId的可用性“查找矩阵”

例如,如果有10个TYPEID和5个MANUFACTURERID,并且说3个LOCATIONID,我会在表4中插入10x5x3so150行

表1、2和3之间没有直接联系,它们只是产品类型、制造商和地点的独立表。 稍后,在表4中会有一个“标志”列来确定哪个可用性为真/假

类似这样,但我不知道语法:

SELECT DISTINCT TYPEID FROM TABLE1
Loop
    SELECT DISTINCT MANUFACTURERID FROM TABLE2
    Loop
        SELECT DISTINCT LOCATIONID FROM TABLE3
        Loop
            INSERT INTO TABLE4 (TYPEID,MANUFACTURERID,LOCATIONID) VALUES TYPEID,MANUFACTURERID,LOCATIONID
        EndLoop
    EndLoop
EndLoop
我相信我;我以前见过这样做(我想是在一个过程中),但我找不到这个例子,非常感谢您的帮助。

无需循环:

INSERT INTO TABLE4 (TYPEID,MANUFACTURERID,LOCATIONID)
SELECT DISTINCT TABLE1.TYPEID, TABLE2.MANUFACTURERID, TABLE3.LOCATIONID 
FROM TABLE1 
CROSS JOIN TABLE2
CROSS JOIN TABLE3;

您只需要
交叉连接

insert into table4 (TYPEID,MANUFACTURERID,LOCATIONID)
select
    t1.TYPEID,
    t2.MANUFACTURERID,
    t3.LOCATIONID
from (
    SELECT DISTINCT TYPEID FROM TABLE1
) t1 cross join (
    SELECT DISTINCT MANUFACTURERID FROM TABLE2
) t2 cross join (
    SELECT DISTINCT LOCATIONID FROM TABLE3
) t3;


作为参考,Oracle docs on Cross Join:我将使用第一个查询。为什么要交叉连接所有记录(如第二个查询),而我们只想连接不同的ID?@ThorstenKettner-我同意。第二条路很清楚,但第一条路是正确的。
insert into table4 (TYPEID,MANUFACTURERID,LOCATIONID)
select distinct
    t1.TYPEID,
    t2.MANUFACTURERID,
    t3.LOCATIONID
from table1 t1
cross join table2 t2
cross join table3 t3