2015-04-09 3 views
0

У меня есть две таблицы с именем «Книга» и «Автор». Атрибутами таблицы «Книга» являются: PK-Book_Num, Book_Title, Book_Year, Book_Cost, Book_Subject. Атрибуты для таблицы «Автор»: PK-Au_ID, Au_Fname, Au_Lname. Эти две таблицы имеют отношение M: N друг к другу, а таблица мостов между ними называется «Writes» и имеет составной первичный ключ из двух таблиц, состоящих из Book_Num и Au_ID. Вот мой вопрос: я хочу написать запрос для отображения Au_ID, Au_Fname, Au_Lname для всех авторов, которые никогда не писали книгу с темой «Программирование» и заказывали результаты Au_Lname. Как я могу сделать это с помощью подзапроса?Объединяется с использованием Sub Queries

ответ

0

Дайте этот выстрел:

SELECT A.Au_ID, A.Au_Fname, A.Au_Lname FROM Author A 
    JOIN Writes W ON A.Au_ID = W.Au_ID 
    JOIN Book B ON B.Book_Num = W.Book_Num 
    WHERE A.Au_ID NOT IN (
    SELECT A.Au_ID FROM Author A 
     JOIN Writes W ON A.Au_ID = W.Au_ID 
     JOIN Book B ON B.Book_Num = W.Book_Num 
     WHERE B.Book_Subject = 'Programming' 
) 
    ORDER BY A.Au_Lname ASC; 
+0

Большое спасибо, мне просто нужно было добавить Unique в Au_ID, чтобы получить запрос, который я искал. – user3046541

0

Если вы хотите более высокую производительность, вы можете использовать «НЕ СУЩЕСТВУЕТ», чтобы получить данные, которые вы хотите.

SELECT Au_ID, Au_Fname, Au_Lname FROM Author 
WHERE NOT EXISTS 
(
    SELECT A.Au_ID FROM Author A 
    JOIN Writes W ON A.Au_ID = W.Au_ID 
    JOIN Book B ON B.Book_Num = W.Book_Num 
    WHERE B.Book_Subject = 'Programming' 
    AND Author.Au_ID = A.Au_ID 
) 
ORDER BY Au_Lname ASC 
Смежные вопросы