2011-01-23 136 views
13

Hay un operador DISTINCT en SQL. Sin embargo, tengo una tarea en la que necesito obtener algunos valores distintos de una tabla, y solo puedo usar álgebra relacional. ¿Hay alguna manera?Selección de filas DISTINCT en álgebra relacional

+0

Quizás pueda usar el operador de división Rel1 ÷ Rel1! –

Respuesta

31

Las proyecciones relacionales siempre devuelven distintas tuplas, por lo que nunca es necesario DISTINCT. Las tuplas duplicadas no están permitidas en la RA, siendo esta una diferencia importante entre el modelo relacional y el modelo SQL.

+0

Sé que esta es una vieja pregunta, pero tengo que objetar, hay un operador similar en álgebra relacional, en mi edición de Ullmans Database Systems. El libro completo está en el siguiente capítulo: ,, 5.2.1 Duplicate Elimination ". Sí, claro, los duplicados no están permitidos en los juegos normales, pero hay varios, lo que les permite. –

+3

Hola DDavid, creo que te puedes estar perdiendo el punto hecho por Molina, Ullman, Widom (excelente libro por cierto y uno a menudo consulte). Cita de la sección 5.2: "Cuando los DBMS que utilizaron el modelo relacional se desarrollaron por primera vez, sus lenguajes de consulta implementaron en gran medida el álgebra relacional. Sin embargo ... estos sistemas consideraban las relaciones como * bolsas *, no conjuntos. "(Énfasis mío) Continúan señalando que las operaciones de bolsa son diferentes a las operaciones establecidas soportadas por la RA. El" operador "DISTINTO de SQL toma una bolsa de tuplas y elimina duplicados. RA trata exclusivamente con conjuntos de tuplas. – sqlvogel

3

Relational Algebra se basa en la teoría de conjuntos. SQL es una implementación de la teoría de conjuntos múltiples. Set siempre tiene elementos distintos. Así que las tuplas son distintas por defecto en álgebra relacional.

Cuestiones relacionadas