Получить общие записи из объединения - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть 2 таблицы - пользователи и пользовательские книги:

USERID  USERNAME  (USERS)
 --------  -------
 1         User1
 2         User2
 3         User3
 .         UserX

ID   USERID    BOOKID (USERBOOKS)
---  --------  -------
 1     1         1
 2     2         1
 3     3         1
 4     2         2
 5     2         2
 .   userx      bookx

Я хотел бы получить в этом примере общие записи (обычные книги, читаемые каждым пользователем), получая пользователей, которые читают книгу 1, ноКонечно, идентификаторы книг всегда меняются

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Попробуйте:

DECLARE @BOOK INT = 2;

SELECT UB.BOOKID,U.USERNAME,COUNT(*) AS TIMES 
FROM @USERBOOKS UB
INNER JOIN @USERS U ON UB.USERID = U.USERID
WHERE UB.BOOKID = @BOOK
GROUP BY BOOKID,U.USERNAME
ORDER BY 1,2 
;

Обратите внимание, что идентификатор книги 2 использовался дважды пользователем2

0 голосов
/ 20 февраля 2019

Если я не пропустил что-то очевидное, вы ищете exists:

SELECT UserId, UserName  
FROM Users
WHERE EXISTS
(
    SELECT 1
    FROM UserBooks
    WHERE UserBooks.UserId = USERS.UserId
    AND BookId = 1
)

Это вернет всех пользователей, у которых есть соответствующие записи в UserBooks с bookId 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...