Chà, vấn đề của bạn dường như là bạn đang sử dụng một thiết kế bảng không chuẩn hóa. Nếu một ID
nhất định luôn có cùng một ParentID
, mối quan hệ đó không nên được chỉ định riêng biệt trong tất cả các hàng này.
Thiết kế tốt hơn sẽ là có một bảng duy nhất hiển thị các mối quan hệ con chính, với ID
làm khóa chính và bảng thứ hai hiển thị ánh xạ của ID
thành ObjectID
, trong đó tôi cho rằng cả hai cột cùng nhau sẽ bao gồm khóa chính. Sau đó, bạn sẽ áp dụng truy vấn phân cấp của mình với bảng đầu tiên và nối kết quả của nó với bảng khác để lấy các đối tượng có liên quan cho mỗi hàng.
Bạn có thể mô phỏng điều này với cấu trúc bảng hiện tại của mình ...
with parent_child as (select distinct id, parent_id from table),
tree as (select id, parent_id from parent_child
start with parent_id = 0
connect by prior id = parent_id )
select id, table.parent_id, table.object_id
from tree join table using (id)