2013-10-24 2 views
0

Узнайте, сколько книг в базе данных не входит в заказ.Использование подзапроса с NOT IN

Запрос:

SELECT COUNT(title) 
FROM book INNER JOIN orders ON book.isbn = orders.bookID 
WHERE isbn NOT IN (bookID); 
+0

Пожалуйста, отредактируйте. 'NOT IN' не является функцией, это оператор (или два, в зависимости от того, как вы смотрите на него). –

ответ

3

Я бы наклониться от использования NOT IN здесь. Научитесь использовать JOIN:.

SELECT Count(*) 
FROM 
    book AS B 
    LEFT JOIN orders AS O 
     ON B.isbn = O.bookID 
WHERE 
    O.isbn IS NULL 
; 

А также (не 100% уверен, что это будет работать в Access, но я так думаю):

SELECT Count(*) 
FROM 
    book AS B 
WHERE 
    NOT EXISTS (
     SELECT * 
     FROM orders AS O 
     WHERE B.isbn = O.bookID 
    ) 
; 

Обратите внимание, что вам не нужно Count(title), Count(*) работает отлично и не ставит под сомнение что, возможно, вы пытаетесь подсчитать количество не-NULL-титров.

0

Если вы хотите использовать подзапрос и NOT IN, то вы должны написать так

SELECT COUNT(title) 
FROM book 
WHERE isbn NOT IN (SELECT bookID 
        FROM orders) 
Смежные вопросы