如何从表格中选择常用标题?

时间:2019-04-21 08:49:58

标签: mysql sql subquery

因此,我正在创建一个电影站点,您可以在其中创建自己的列表,在其中可以添加已经观看过的电影,打算观看的电影等。

在我的网站上,您有机会访问其他用户的个人资料,并查看他们的列表,并且可以查看哪些电影同时出现在您的电影中以及访问的用户列表中。

所以,假设我有一个名为list的表,该表有2列:username(将电影添加到他的列表中的用户)和title(显然是电影的标题)

我在此表中有一些记录,例如:

John | 电影1

John | 电影5

Patrick | Movie1

Patrick | Movie2

约翰 | 电影3

Patrick | Movie3

John | 电影6

Patrick | Movie7

约翰 | 电影2

在此示例中,Movie1,Movie2和Movie3是Patrick和John列表中的常见电影

这是我尝试过的:

SELECT title FROM list WHERE 
(SELECT title FROM list WHERE username="Patrick")
=
(SELECT title FROM list WHERE username="John")

但这不起作用,它返回以下错误:子查询返回的行多于1

如果有人可以提供解决方案,我将不胜感激!

3 个答案:

答案 0 :(得分:2)

您可以FlowLayout观看他们都喜欢的所有电影,并且只获得group by title是真实的电影,这意味着他们都喜欢:

having count(*) = 2

答案 1 :(得分:1)

您可以在同一张表上使用JOIN

SELECT l.title 
FROM list l
INNER JOIN  (
  SELECT title 
  FROM list WHERE username='Patrick'
) t1 on t1.title = l.title 
inner join  (
  SELECT title 
  FROM list 
  WHERE username='John' 
) t2 on t2.title = l.title

或(以紧凑的方式进行相同的查询)

SELECT l.title 
FROM list l
INNER JOIN  list l1  on l.title = l1.title  
    AND  l1.username='Patrick'
INNER JOIN list l2 on l.title = l2.title 
    AND l2.username='John' 

答案 2 :(得分:1)

基于子查询,查找Patrick电影标题中的所有John电影标题。 demo on db-fiddle

SELECT title 
FROM demo 
WHERE username="Patrick" AND title IN
    (SELECT title 
     FROM demo 
     WHERE username="John");