我已經填充一個空表(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 –