2011-01-23 8 views
13

W języku SQL istnieje operator DISTINCT. Mam jednak zadanie, w którym potrzebuję uzyskać różne wartości z tabeli i mogę używać tylko algebry relacyjnej. Czy istnieje sposób?Wybieranie wierszy DISTINCT w algebrze relacyjnej

+0

Może możesz użyć operatora podziału Rel1 ÷ Rel1! –

Odpowiedz

31

Relacyjne rzuty zawsze zwracają różne krotki, więc DISTINCT nigdy nie jest potrzebny. Zduplikowane krotki są niedozwolone w RA - jako jedna zasadnicza różnica między modelem relacyjnym a modelem SQL.

+0

Wiem, że jest to stare pytanie, ale muszę się sprzeciwić, w algebrze relacyjnej jest coś podobnego do operatora, w moim wydaniu Ullmans Database Systems The Complete Book znajduje się w następującym rozdziale: ,, 5.2.1 Duplicate Elimination ". Tak, jasne, duplikaty są niedozwolone w normalnych zestawach, ale są multisety, które im pozwalają –

+3

Witaj DDavid, myślę, że być może brakuje ci punktu, który zrobił Molina, Ullman, Widom (świetna książka przy okazji i jedna często patrz punkt 5.2): "Kiedy najpierw opracowano DBMS, który korzystał z modelu relacyjnego, ich języki zapytań w dużej mierze zaimplementowały relacyjną algebrę. Jednak ... systemy te postrzegały relacje jako * worki *, a nie zestawy. "(Podkreślam) Podkreślają, że operacje worków różnią się od operacji zestawu obsługiwanych przez RA." DISTINCT "SQL" bierze "krotką torbę i eliminuje duplikaty, RA zajmuje się wyłącznie zestawami krotek. – sqlvogel

3

Relacyjna algebra opiera się na teorii mnogości. SQL jest implementacją teorii wielu zbiorów. Zestaw zawsze ma różne elementy. Więc krotki są domyślnie odrębne w relacyjnej algebrze.