Получить идентификатор пользователя из базы данных SQL с несколькими таблицами - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь получить адрес электронной почты для пользователя, на котором человек просматривал определенное количество фильмов.Например, если пользователь посмотрел фильм 1,2 и 3, когда я запустил запрос для фильма 3, этот пользователь должен появиться в моей таблице.Но когда пользователь имеет соответствие всем критериям, например, когда я запускаю запрос для просмотра пользователем фильмов 1, 2, 3 и 4, этот пользователь не должен отображаться.

Вот две таблицы:

enter image description here

enter image description here

SELECT Email 
From Users
Inner Join Movies On Users.ID = Movies.ID
Where(Movies = "Movie 1" AND Movies = "Movie 2")

Но как-то, как пользователь 1 и пользователь 2 появляются, но это необходимотолько пользователь 1 в списке.

Ответы [ 2 ]

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

Здесь есть несколько рабочих решений.

Однако для типичных типов этого запроса опубликованные здесь решения не будут выполнены, если пользователь увидит, например, Movie1 два раза.И скажем, на веб-сайте пользователь мог купить бритвенные лезвия несколько раз, но нам нужны бритвенные лезвия и дескриптор бритвы.

Итак, исходная проблема не указывает и не указывает, видел ли пользователь то же самое.фильм более одного раза, но в качестве вопроса Q + такого ограничения не было наложено на вопрос, и, таким образом, по логике, мы можем с полным основанием предположить, что это возможно.

В результате мой "воздух"sql был бы такой:

SELECT id, [Name], Email
FROM tblNames
WHERE [Name] is in
   (select [Name] from tblMovies where Movies = 'Movie 1')
   AND
 [Name] is in
        (select [Name] from tblMovies where Movies = 'Movie 2')

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

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

Если вам нужны электронные письма пользователей, которые смотрели фильмы 'Movie1' и 'Movie2', вы можете сделать это:

select u.email
from users u inner join movies m
on m.id = u.id
where m.movies in ('Movie1', 'Movie2')
group by u.email
having count(*) = 2

Если есть случай, когда пользователь посмотрел фильм более одного раза, измените:

having count(*) = 2

с:

having count(distinct m.movies) = 2 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...