@andreyblind

Запрос к базе MySQL c вложенным логическим отрицанием?

Доброго времени суток. Есть три таблицы:

books (id, title)
users (id, first_name, last_name, age)
users_books (id, user_id, book_id)
В таблице users_books содержится информация о купленных пользователями книгах. Необходимо выбрать список пользователей, которые не покупали книгу с определенным названием.
Мой запрос:

SELECT 
 DISTINCT users.first_name, 
 users.last_name, 
 users.id 
FROM 
 users 
 INNER JOIN users_books ON users.id = users_books.user_id 
WHERE 
 users_books.user_id NOT IN (
  SELECT 
   `user_id` 
  FROM 
   `users_books` 
  WHERE 
   users_books.book_id = (SELECT id FROM books where title = "Book")
 ) 
GROUP BY 
 users_books.user_id


Можно ли выполнить запрос оптимальнее?
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 1
taliban
@taliban
php программист
Нормальный запрос, только WHERE подправить чуток надо
SELECT 
 DISTINCT users.first_name, 
 users.last_name, 
 users.id 
FROM 
 users 
 INNER JOIN users_books ON users.id = users_books.user_id 
WHERE 
 users_books.book_id NOT IN (SELECT id FROM books where title = "Book" ) 
GROUP BY 
 users_books.user_id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы