Tôi có một bảng với hai cột ID, như vậy:SQL Deduplicate Danh sách Tuples
╔════════╦══════╗
║ Master ║ Dupe ║
╠════════╬══════╣
║ 2 ║ 7 ║
║ 3 ║ 6 ║
║ 6 ║ 7 ║
║ 20 ║ 25 ║
║ 75 ║ 25 ║
╚════════╩══════╝
Mỗi hàng đại diện cho ID của hai hàng trong một bảng sql được coi là bản sao của nhau.
Bảng này có thể chứa hàng nghìn mục nhập, không đảm bảo cho dữ liệu ngoài cột Master
đang được sắp xếp theo thứ tự tăng dần như được mô tả. Một trong hai cột có thể chứa cùng một ID với cột khác, có khả năng chống lại ID khác hoặc cùng một ID đối tác. Một lần nữa - không bảo đảm.
Từ bảng này, tôi muốn có được chỉ mục của Sư Phụ và tất cả các bản sao có thể có của nó. Như hình dưới đây.
kết quả mong muốn:
- ID thấp nhất nên được giữ như là bậc thầy
- Tất cả các giá trị nhân bản tiếp theo của một dupe nên lập bản đồ trở lại như nhau (ID thấp nhất) chủ
Đối với ở trên, đầu ra mong muốn sẽ trông giống như vậy (nhưng các cột KHÔNG phải được sắp xếp):
╔════════╦══════╗
║ Master ║ Dupe ║
╠════════╬══════╣
║ 2 ║ 3 ║
║ 2 ║ 6 ║
║ 2 ║ 7 ║
║ 20 ║ 25 ║
║ 20 ║ 75 ║
╚════════╩══════╝
Tôi thấy khó giải thích vấn đề này nên googling của tôi đã không trở lại nhiều. Tôi nghĩ rằng phải có một thuật toán một nơi nào đó cho iterating thông qua một danh sách các bộ dữ liệu như thế này và phát hiện trùng lặp.
Bất kỳ trợ giúp nào được đánh giá cao!
EDIT: Tôi đã sửa đổi các bảng mẫu để giải thích rõ hơn nội dung của chúng có thể trông như thế nào.
Một số lưu ý để xem xét,
- Không có bảo lãnh của một chuỗi. Tất cả có thể là một chuỗi lớn, rất nhiều chuỗi nhỏ hoặc không có gì cả.
- Không có đảm bảo rằng tất cả các cặp xuất hiện theo thứ tự ngược ở một nơi khác trong bảng
Từ những gì tôi có thể thấy, vấn đề có vẻ là đệ quy, tôi nghĩ LukStorms đang đi đúng hướng nhưng tôi có thể' t hoàn toàn tìm ra nó
TRẢ LỜI: Mặc dù cả hai giải pháp dưới đây từ @artm và @LukStorms dường như hoạt động, tôi nhận thấy giải pháp ngắn gọn hơn và dễ đọc hơn. Cảm ơn cả hai người! Trợ giúp tuyệt vời về một câu hỏi khó. Tôi chỉ ước tôi có thể trả lời cho cả hai bạn
Bạn có thể giải thích tốt hơn logic của bạn? Bản chất của mối quan hệ giữa 2 và 3 là gì, khi nó xuất hiện trong tập kết quả của bạn, từ bảng gốc? –
Chắc chắn, 3 và 6 là hai mặt, 6 và 7 là hai mặt, 7 và 2 là hai mặt. Giữ id thấp nhất của tập hợp (2), ID của 3, 6 và 7 là tất cả các dupes của 2. –