Вопрос

Я полностью осознаю, что деление множества можно выполнить с помощью ряда других операций, поэтому мой вопрос:

Есть ли в SQL команда для разделения множества?

Это было полезно?

Решение

http://vadimtropashko.files.wordpress.com/2007/02/ch3.pdf

Со страницы 32:

Реляционное деление не является фундаментальным оператором.Его можно выразить через проекцию, декартово произведение и разность множеств.

Так что нет.:)

Другие советы

Связанный вопрос: Проектирование базы данных для маркировки

И соответствующая часть ответа Эта статья

Короче говоря, нет, в SQL нет разделения множеств.

Вот хорошее объяснение с использованием синтаксиса реляционной алгебры.

Данные таблицы sailors, boats и reserves (примеры из «Системы управления базами данных» Рамакришнана и Герке) вы можете вычислить моряков, зарезервировавших все лодки, с помощью следующего запроса:

SELECT name FROM sailors
WHERE Sid NOT IN (
    -- A sailor is disqualified if by attaching a boat,
    -- we obtain a tuple <sailor, boat> that is not in reserves
    SELECT s.Sid
    FROM sailors s, boats b
    WHERE (s.Sid, b.Bid) NOT IN (
        SELECT Sid, Bid FROM reserves
    )
);

-- Alternatively:
SELECT name FROM sailors s
WHERE NOT EXISTS (
    -- Not reserved boats
    (SELECT bid FROM boats)
    EXCEPT
    (SELECT r.bid FROM reserves r
    WHERE r.sid = s.sid)
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top