我要用TAB_B中的随机记录(5%)填充一个空表(TAB_A),并与其他3个表(C1,C2,C3)连接。
现在,如果我运行以下查询,一切运行良好:
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_A.field3,其值在TAB_C3中。 所以我重写了我之前的查询:
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 “......但没有成功:再次发生同样的错误。
顺便说一句,以下查询完全有效:
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
有人能帮助我吗?
答案 0 :(得分:0)
尝试
...
SELECT B.ID_TASS,B.ID_SEZ, C3_Z_ID
FROM(SELECT B. *, C3.Z_ID AS C3_Z_ID, row_number() ...
答案 1 :(得分:0)
虽然我没有测试
,但以下情况应该有效INSERT INTO TAB_A (field1,field2,field3)
> SELECT intTab.ID_TASS, intTab.ID_SEZ, intTab.Z_ID
> FROM (SELECT B.*, c3.z_id,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) intTab
> WHERE intTab.r < (SELECT COUNT(*) FROM B)*0.05