【发布时间】:2011-12-10 19:03:32
【问题描述】:
我必须用来自 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
谁能帮帮我?
【问题讨论】:
-
如果您担心性能,您可能需要考虑使用 SAMPLE:download.oracle.com/docs/cd/E11882_01/server.112/e26088/…
标签: sql oracle select join random