所以我正在创建一个电影网站,您可以在其中创建自己的列表,您可以在其中添加您已经观看过的电影,您计划观看的电影等。
在我的网站上,您有机会访问其他用户的个人资料,并查看他们的列表,您可以检查您的电影和访问的用户列表中都存在哪些电影。
所以,假设我有一个名为list的表,有2列:用户名(将电影添加到其列表中的用户)和标题(显然是电影的标题)
我在此表中有一些记录,例如:
约翰|视频1
约翰|视频5
帕特里克|视频1
帕特里克|视频2
约翰|视频3
帕特里克|视频3
约翰|视频6
帕特里克|视频7
约翰|视频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 行
如果有人能提供解决方案,我将不胜感激!
您可以group by title
他们都喜欢的所有电影,而只获得having count(*) = 2
为真的电影,这意味着他们都喜欢:
select title
from tablename
where username in ('Patrick', 'John')
group by title
having count(*) = 2
您可以在同一表上使用 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'
基于子查询,查找帕特里克电影标题中的所有约翰电影标题。 DB-Fiddle 上的演示
SELECT title
FROM demo
WHERE username="Patrick" AND title IN
(SELECT title
FROM demo
WHERE username="John");