Это 2 таблицы в моем SQL-запросе, и я хочу узнать издателя, который не опубликовал ни одной книги.
Я использую SQL Server, и я использовал:
SELECT PublisherID
FROM Publisher
WHERE PublisherID NOT IN (SELECT PublisherID FROM Book);
но это не работает. Я делаю что-то неправильно?
Это результат для этого запроса Таблица результатов
Он должен показывать PublisherID = P04.
Вы должны использовать условие PublisherID IS NOT NULL
внутри подзапроса. Ваша NULL
запись возвращала false
для всех строк.
SELECT PublisherID
FROM Publisher
WHERE PublisherID NOT IN (SELECT PublisherID FROM Book WHERE PublisherID IS NOT NULL);
В качестве альтернативы вы можете использовать LEFT JOIN
и добавить условие с помощью WHERE b.PublisherID IS NULL
.
SELECT *
FROM Publisher p
LEFT JOIN Book b
ON b.PublisherID = p.PublisherID
WHERE b.PublisherID IS NULL
Чтобы узнать издателя, который опубликовал более 1 книги, вы можете использовать GROUP BY
и HAVING
с IN
, как показано ниже.
SELECT PublisherID
FROM @Publisher
WHERE PublisherID IN (
SELECT PublisherID
FROM @Book
WHERE PublisherID IS NOT NULL
GROUP BY PublisherID
HAVING COUNT(PublisherID) > 1
);
Как узнать издательство, выпустившее более 1 книги
Вы можете использовать GROUP BY
и HAVING
, чтобы найти такой результат
Я просто получаю пустую таблицу только с именами столбцов