2016-05-12 4 views
0

Рассмотрим отношение S с атрибутами A, B, C и D. Напишите SQL-запрос, который возвращает пустой ответ тогда и только тогда, когда функциональная зависимость AB -> C выполняется в отношении S. (Не важно, что ваш запрос возвращает, когда функциональная зависимость не выполняется на S, если в этом случае результат запроса не пуст.) Предположим, что нет значений NULL.SQL-запрос на AB -> C

Мой вопрос заключается в том, как вернуть пустой ответ и как исправить мою часть, если это не так.

Select 
From S AS S1, S As S2, 
Where (S1.C!=S2.C) AND (S1.A=S2.A) AND (S1.B=S2.B) 
+0

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что Stack Overflow не существует, чтобы выполнить домашнюю работу. –

+0

Что? Я изучаю экзамен. Это не вопрос. –

+0

Плюс, это середина мая. Школа закончилась, за исключением финала. Почему я должен задать вопрос hw сейчас? Это из учебного пособия. –

ответ

0

... тогда и только тогда каждый значение (а, б) связан с точно один значения (с).

Проверка, что необходимо, есть ли какое-либо значение кортежа (а, б), которые связаны с более чем одного значения с.

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

Вот несколько простых примеров.

Функциональная зависимость (а, б) -> (с) держит

a b c d 
-- -- -- -- 
2 3 5 42 
2 3 5 42 

Функциональная зависимость делает не держать

a b c d 
-- -- -- -- 
2 3 7 42 
2 3 11 42 

Если функциональная зависимость не выполняется, что требует что такое же значение (a, b) соответствует различным значениям (c).

Возможны несколько запросов. Вот один из примеров:

SELECT s.a 
     , s.b 
    FROM s 
    GROUP 
    BY s.a 
     , s.b 
HAVING NOT (MIN(s.c) <=> MAX(s.c)) 
Смежные вопросы