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