我已经填充一个空表(TAB_A)与来自TAB_B随机记录(5%)萃取随机样本,加入了与其它3个表(C1,C2,C3)。SQL - 从连接表
现在,如果我运行下面的查询一切正常:
INSERT INTO TAB_A (field1,field2)
SELECT TAB_B.ID_TASS, TAB_B.ID_SEZ
FROM (SELECT TAB_B.*, row_number()
OVER (ORDER BY dbms_random.VALUE) r
FROM TAB_B)
WHERE r < (SELECT COUNT(*) FROM TAB_B)*0.05
的问题是,我也需要填写其值在TAB_C3的TAB_A.field3。 所以我重写我前面的查询:
INSERT INTO TAB_A (field1,field2,field3)
SELECT B.ID_TASS, B.ID_SEZ, C3.Z_ID
FROM (SELECT B.*, row_number()
OVER (ORDER BY dbms_random.VALUE) r
FROM TAB_B B
JOIN TAB_C1 C1 on C1.X_ID = B.X_ID
JOIN TAB_C2 C2 on C2.Y_ID = C1.Y_ID
JOIN TAB_C3 C3 on C3.Z_ID = C2.Z_ID
WHERE C3.Z_ID = 9)
WHERE r < (SELECT COUNT(*) FROM B)*0.05
但出现错误:ORA-00904: “C3.Z_ID” 无效的标识符。
我想问题可能是在声明中 “SELECT B.ID_TASS,B.ID_SEZ,C3.Z_ID”,我在改变 “SELECT TAB_B.ID_TASS,TAB_B.ID_SEZ,TAB_C3.Z_ID” ....但没有成功:再次发生相同的错误。
顺便说一句,下面的查询工作perfectely:
select count(*)
from TAB_B B
JOIN TAB_C1 C1 on C1.X_ID = B.X_ID
JOIN TAB_C2 C2 on C2.Y_ID = C1.Y_ID
JOIN TAB_C3 C3 on C3.Z_ID = C2.Z_ID
WHERE C3.Z_ID = 9
任何人可以帮助我吗?
如果你担心性能,你可能要考虑使用示例:http://download.oracle.com/docs/cd/E11882_01/server.112/e26088/statements_10002 .htm#i2065953 –