2011-01-23 21 views
13

Esiste un operatore DISTINCT in SQL. Tuttavia, ho un incarico nel quale ho bisogno di ottenere alcuni valori distinti da una tabella, e posso usare solo l'algebra relazionale. C'è un modo?Selezione di righe DISTINCT nell'algebra relazionale

+0

Forse è possibile utilizzare l'operatore di divisione Rel1 ÷ Rel1! –

risposta

31

Le proiezioni relazionali restituiscono sempre tup distinte in modo che DISTINCT non sia mai necessario. Le tuple duplicate non sono consentite nell'array RA - questa è una delle principali differenze tra il modello relazionale e il modello SQL.

+0

So che questa è una vecchia domanda ma devo obiettare, c'è un operatore distinto come l'algebra relazionale, nella mia edizione di Ullmans Database Systems Il libro completo è nel seguente capitolo: ,, 5.2.1 Eliminazione duplicata ". Sì, certo, i duplicati non sono consentiti nei set normali, ma ci sono i multiset, che li permettono. –

+3

Ciao DDavid, penso che potresti perdere il punto sollevato da Molina, Ullman, Widom (ottimo libro tra l'altro e uno spesso fare riferimento a.) Citazione dalla sezione 5.2: "Quando i DBMS che utilizzavano il modello relazionale venivano sviluppati per la prima volta, i loro linguaggi di query implementavano in gran parte l'algebra relazionale. Tuttavia ... questi sistemi consideravano le relazioni come * borse *, non insiemi. "(Mia enfasi) Continuano a sottolineare che le operazioni di borsa sono diverse dalle operazioni impostate supportate da RA. L'operatore" DISTINCT "di SQL prende una borsa tuple ed elimina i duplicati RA si occupa esclusivamente di set di tuple. – sqlvogel

3

L'algebra relazionale si basa sulla teoria degli insiemi. SQL è un'implementazione della teoria dei multi-set. Set ha sempre elementi distinti. Quindi le tuple sono distinte di default in Algebra relazionale.