Как выбрать общие названия из таблицы? - PullRequest
0 голосов
/ 21 апреля 2019

Итак, я создаю сайт с фильмами, где вы можете создать свой собственный список, в который вы можете добавлять фильмы, которые уже смотрели, планируете смотреть и т. Д.

На моем сайте у вас есть возможность посетить профиль других пользователей, просмотреть их список, и вы можете проверить, какие фильмы присутствуют как в вашем, так и в списке посещенных пользователей.

Итак, скажем, у меня есть таблица с именем list, с двумя столбцами: username (пользователь, который добавил фильм в свой список) и title (очевидно, название фильма)

У меня есть несколько записей в этой таблице, например:

John | Movie1

John | Movie5

Patrick | Movie1

Patrick | видеофильм2

John | Movie3

Patrick | Movie3

John | Movie6

Patrick | Movie7

John | видеофильм2

В этом примере Movie1, Movie2 и Movie3 являются общими фильмами в списке Патрика и Джона

Вот что я пробовал:

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

Но это не работает, возвращается со следующей ошибкой: Подзапрос возвращает более 1 строки

Буду признателен, если кто-нибудь сможет найти решение!

Ответы [ 3 ]

2 голосов
/ 21 апреля 2019

Вы можете group by title для всех фильмов, которые им нравятся, и получать только те, для которых истинно having count(*) = 2, что означает, что им обоим нравится:

select title 
from tablename
where username in ('Patrick', 'John')
group by title
having count(*) = 2
1 голос
/ 21 апреля 2019

На основе подзапроса, Найти все название фильма Джон, который находится в названии фильма Патрик. демо на db-fiddle

SELECT title 
FROM demo 
WHERE username="Patrick" AND title IN
    (SELECT title 
     FROM demo 
     WHERE username="John");
1 голос
/ 21 апреля 2019

Вы можете использовать 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' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...