所以我正在创建一个电影网站,在那里你可以创建你自己的列表,在其中你可以添加你已经看过的电影,你计划看的电影等等。
在我的网站上,你有机会访问其他用户的个人资料,查看他们的列表,你可以查看你和被访问用户的列表中都有哪些电影。
因此,假设我有一个名为list的表,其中包含两列:username(已将电影添加到列表中的用户)和title (显然是电影的标题)
我在这个表中有一些记录,例如:
John|电影1
John|电影5
Patrick|电影1
帕特里克|电影2
John|电影3
Patrick|电影3
John|电影6
Patrick|电影7
John|电影2
在本例中,Movie1、Movie2和Movie3是帕特里克和约翰列表中最常见的电影
这是我尝试过的:
SELECT title FROM list WHERE
(SELECT title FROM list WHERE username="Patrick")
=
(SELECT title FROM list WHERE username="John")但是这不起作用,它返回以下错误: Subquery返回超过1行
如果有人能提供解决方案,我将不胜感激!
发布于 2019-04-21 16:59:05
您可以在同一个表上使用连接
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.titleor (以紧凑方式进行相同的查询)
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' 发布于 2019-04-21 16:56:50
你可以对他们都喜欢的所有电影执行group by title,并且只获取那些having count(*) = 2为真的电影,这意味着他们都喜欢:
select title
from tablename
where username in ('Patrick', 'John')
group by title
having count(*) = 2发布于 2019-04-21 20:54:12
子查询基于,找到所有约翰电影标题,这是在帕特里克电影标题。demo on db-fiddle
SELECT title
FROM demo
WHERE username="Patrick" AND title IN
(SELECT title
FROM demo
WHERE username="John");https://stackoverflow.com/questions/55781264
复制相似问题