2013-12-01 4 views
0

Мне нужно выразить деление реляционной алгебры в моем sql. Это должно быть сделано каким-то образом с использованием оператора not exist. Например, задача «Найти яблоки, которые все покупают Том». Покажите имена. Это деление. Я придумал следующий запрос, но он, похоже, не работает.как выразить деление в mysql

SELECT S.name 
FROM Apples S 
WHERE NOT EXISTS(SELECT E.pId 
         from Products E 
        where NOT EXISTS (SELECT L.pId 
             FROM Buyers L 
             where E.pId = L.pId 
             AND S.mId = E.mId 
             AND L.name = 'Tom')); 

Другие идеи?

ответ

0

Чтобы сделать это только с помощью EXISTS вы можете попробовать:

SELECT S.NAME 
FROM Apples S 
WHERE EXISTS (
    SELECT 1 
    FROM Products E 
    WHERE S.mId = E.mId 
     AND NOT EXISTS (
     SELECT 1 
     FROM Buyers L 
     WHERE E.pId = L.pId 
      AND L.NAME <> 'Tom' 
     ) 
     AND EXISTS (
     SELECT 1 
     FROM Buyers L 
     WHERE E.pId = L.pId 
      AND L.NAME = 'Tom' 
     ) 
    ); 

Это будет делать: Получить все яблоки, которые существуют в продуктах, но НЕ СУЩЕСТВУЕТ любого покупателя с именем <> «TOM», но в то В то же время он СУЩЕСТВУЕТ покупателю с именем «Том». Надеюсь, это поможет

+0

Hello Filipe. Спасибо за ваш ответ, но мне нужно использовать только «НЕ EXIST» везде, как я это сделал, но мой запрос не дает мне результатов, которые я хочу. Вот почему я задаюсь вопросом, есть ли у меня какая-то ошибка? Спасибо – user3054367

+0

Вы можете поделиться [sqlfiddle] (http://www.sqlifddle.com) с таблицами и образцами данных, чтобы немного поработать с ним? –

Смежные вопросы