Поэтому я создаю сайт с фильмами, где вы можете создать свой собственный список, в который вы можете добавить фильмы, которые вы уже смотрели, планируете смотреть и т.д.
На моем сайте у вас есть возможность зайти в профиль других пользователей, посмотреть их список, и вы можете проверить, какие фильмы присутствуют как в вашем, так и в списке посещенных пользователей.
Итак, скажем, у меня есть таблица с именем list, с 2 столбцами: username (пользователь, который добавил фильм в свой список) и title (очевидно, заголовок фильма)
У меня есть несколько записей в этой таблице, например:
Джон | Movie1
Джон | Movie5
Патрик | Movie1
Патрик | видеофильм2
Джон | Movie3
Патрик | Movie3
Джон | Movie6
Патрик | Movie7
Джон | видеофильм2
В этом примере Movie1, Movie2 и Movie3 являются общими фильмами в списке Патрика и Джона.
Вот что я пробовал:
SELECT title FROM list WHERE
(SELECT title FROM list WHERE username="Patrick")
=
(SELECT title FROM list WHERE username="John")
Но это не работает, оно возвращается со следующей ошибкой: Подзапрос возвращается с более чем 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'
select title from (...'Patrick') p join (...'John') j using (title);
Вы можете group by title
все фильмы, которые им нравятся, и получать только те, для которых значение having count(*) = 2
истинно, что означает, что им обоим нравится:
select title
from tablename
where username in ('Patrick', 'John')
group by title
having count(*) = 2
На основе подзапроса, найти все название фильма Джон, который находится в названии фильма Патрик. демо на дб-скрипке
SELECT title
FROM demo
WHERE username="Patrick" AND title IN
(SELECT title
FROM demo
WHERE username="John");
Проверь это:
(SELECT title FROM list WHERE username like 'Patrick' )
intersect
(SELECT title FROM list WHERE username like 'John' );