Выберите, где у пиввота есть обе записи - PullRequest
0 голосов
/ 18 апреля 2019

Sqlite 3.22.0

У меня есть эти таблицы: users, book, user_books.Я пытаюсь выбрать книгу, которая принадлежит только определенным пользователям (пользователи с идентификаторами 3 и 5 в приведенном ниже примере):

select * from books
inner join user_books ub on books.id = ub.book_id
where ub.user_id in (3, 5)

user_books data:

user_id | book_id
      1 |       1
      2 |       2
      3 |       3
      4 |       4
      5 |       5
      3 |       5

Я ожидаю получить книгу с идентификатором 5, но я получаю книгу с идентификатором 3 и 5.

Что не так?

Я пытался

select * from books
inner join user_books ub on books.id = ub.book_id
where ub.user_id = 3 and ub.user_id = 5

но получил пустой результат.

1 Ответ

1 голос
/ 18 апреля 2019

Вы должны объединить 2 таблицы group by b.id и использовать having count(*) = 2, чтобы получить только книги, принадлежащие обоим пользователям:

select b.id 
from books b inner join user_books u
on u.book_id = b.id
where u.user_id in (3, 5)
group by b.id
having count(*) = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...