I’ve to fill an empty table (TAB_A) with random records (5%) from TAB_B, joined with other 3 tables (C1, C2, C3).
Now, if I run the following query everything works well:
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
The problem is that I need also to fill in the TAB_A.field3 whose values are in TAB_C3.
So I rewrite my previous query:
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
but an error occurs: ORA-00904: “C3.Z_ID” invalid identifier.
I think the problem could be in the statement “SELECT B.ID_TASS, B.ID_SEZ, C3.Z_ID“, that I changed in “SELECT TAB_B.ID_TASS, TAB_B.ID_SEZ, TAB_C3.Z_ID“…. but without success: the same error occurs again.
By the way, the following query works 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
Can anybody help me?
try
…
SELECT B.ID_TASS, B.ID_SEZ, C3_Z_ID
FROM (SELECT B.*, C3.Z_ID AS C3_Z_ID, row_number()
…