2011-01-23 34 views
13

Có một toán tử DISTINCT trong SQL. Tuy nhiên, tôi có một nhiệm vụ mà tôi cần để có được một số giá trị riêng biệt từ một bảng, và tôi chỉ có thể sử dụng đại số quan hệ. Là có một cách?Chọn các hàng DISTINCT trong đại số quan hệ

+0

Có thể bạn có thể sử dụng toán tử chia Rel1 ÷ Rel1! –

Trả lời

31

Các dự báo quan hệ luôn trả về các bộ dữ liệu riêng biệt để DISTINCT không bao giờ cần thiết. Tuples trùng lặp không được phép trong RA - đó là một sự khác biệt lớn giữa mô hình quan hệ và mô hình SQL.

+0

Tôi biết đây là một câu hỏi cũ nhưng tôi phải phản đối, có một toán tử giống nhau trong đại số quan hệ, trong ấn bản của tôi về Hệ thống Cơ sở dữ liệu Ullmans Toàn bộ Sách trong chương sau: ,, 5.2.1 Loại bỏ trùng lặp ". Có, chắc chắn, bản sao không được phép trong các bộ bình thường, nhưng có nhiều, cho phép chúng –

+3

Hi DDavid, tôi nghĩ rằng bạn có thể bị mất điểm do Molina, Ullman, Widom (cuốn sách tuyệt vời bằng cách này và tôi thường xuyên) Trích dẫn từ phần 5.2: "Khi DBMS sử dụng mô hình quan hệ được phát triển lần đầu tiên, ngôn ngữ truy vấn của họ phần lớn đã triển khai thực hiện đại số quan hệ. Tuy nhiên ... những hệ thống này coi quan hệ là * túi * chứ không phải tập hợp. ”(Nhấn mạnh của tôi) Họ tiếp tục chỉ ra rằng các hoạt động của túi khác với các hoạt động thiết lập được hỗ trợ bởi RA" toán tử DISTINCT "của SQL lấy một túi tuple RA loại trừ các bản sao. – sqlvogel

3

Đại số quan hệ dựa trên lý thuyết tập hợp. SQL là một triển khai thực hiện lý thuyết đa tập hợp. Đặt luôn có các yếu tố riêng biệt. Vì vậy, các bộ dữ liệu được phân biệt theo mặc định trong Đại số Quan hệ.

Các vấn đề liên quan