从具有多个表的SQL数据库中获取用户ID

时间:2019-04-18 15:12:55

标签: mysql sql database sqlite ms-access

我正在尝试为用户观看过一定数量电影的用户提供一个电子邮件地址。例如,如果用户在运行电影3的查询时观看了电影1,2和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 个答案:

答案 0 :(得分:1)

如果您想要看过电影'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 

答案 1 :(得分:1)

这里有一些可行的解决方案。

但是,对于此查询的典型类型,如果用户两次看到说Movie1,则此处发布的解决方案将失败。并说一个网站,用户可能已经购买了几次剃须刀片,但是我们想要剃须刀片和剃须刀手柄。

因此,最初的问题并没有说明或指定用户是否可以看一次以上的同一部电影,但是作为一个Q + A问题,对该问题没有施加任何限制,因此根据逻辑,我们可以有理有据地认为这是可能的。

结果,我的“ air” 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')

使用以上内容,用户可能已经看过很多电影,但是他们必须同时看完这两部电影才能正常工作。因此,使用count实际上会失败,因为这里没有任何迹象表明用户不能多次观看同一部电影。