Переписать готовый запрос в другом виде

SELECT DISTINCT Book.Name AS BookName, Author.Name AS AuthorName 
FROM Book JOIN Author ON Author.ID = Book.AuthorID 
JOIN Rating ON Rating.BookID = Book.ID 
WHERE CAST(ReleaseYear AS varchar(4)) 
NOT LIKE '%' + CAST(Rate AS varchar(2)) + '%'

Всем добрый вечер, подскажите пожалуйста, можно ли написать этот запрос как то иначе. Само задание запроса выглядит так.

Выбрать список книг с именем автора, у которых есть оценка не совпадающая ни с одной из цифр в годе выпуска книги. Книги не должны повторяться

Я написал этот запрос, но он не подходит, хотя выполняет то, что мне нужно.


Ответы (1 шт):

Автор решения: i-one

можно ли написать этот запрос как то иначе

Вместо DISTINCT и JOIN Rating можно использовать коррелированный подзапрос c EXISTS:

SELECT
    Book.Name AS BookName,
    Author.Name AS AuthorName 
FROM Book
    JOIN Author ON Author.ID = Book.AuthorID 
WHERE EXISTS (
    SELECT *
    FROM Rating
    WHERE Rating.BookID = Book.ID
        AND CAST(ReleaseYear AS varchar(4)) NOT LIKE '%' + CAST(Rate AS varchar(2)) + '%'
    )

(перенесли таблицу Rating и связанные с ней предикаты в EXISTS).

→ Ссылка