Theo Oracle (DocId 2658003.1), điều này xảy ra khi ba điều kiện được đáp ứng:
- Tham gia ANSI
- UNION / UNION ALL
- cùng một bảng xuất hiện nhiều lần trong truy vấn
Rõ ràng, "QCSJ_C" được sử dụng nội bộ khi Oracle chuyển đổi các phép nối kiểu ANSI.
CHỈNH SỬA:
Tìm thấy một ví dụ nhỏ nhất:
SELECT * FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy
UNION
SELECT * FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy;
QCSJ_C000000000300000 QCSJ_C000000000300001
X X
Nó có thể được khắc phục bằng cách sử dụng cú pháp nối không ANSI:
SELECT * FROM dual d1, dual d2 WHERE d1.dummy=d2.dummy
UNION
SELECT * FROM dual d1, dual d2 WHERE d1.dummy=d2.dummy;
DUMMY DUMMY_1
X X
Hoặc, tốt hơn là sử dụng tên cột thay vì *
:
SELECT d1.dummy, d2.dummy FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy
UNION
SELECT d1.dummy, d2.dummy FROM dual d1 JOIN dual d2 ON d1.dummy=d2.dummy;
DUMMY DUMMY_1
X X