Как выбрать общие названия из таблицы?

0

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

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

Итак, скажем, у меня есть таблица с именем 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 строкой

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

  • 0
    это было бы простым пересечением я думаю !!!
Теги:
subquery

4 ответа

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' 
  • 0
    Просто: select title from (...'Patrick') p join (...'John') j using (title);
  • 0
    Другие ответы также верны, но, в конце концов, именно этот я нашел лучшее решение для моей проблемы. Спасибо! Я не знал, что тоже могу присоединиться к одному столу.
Показать ещё 2 комментария
2

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

select title 
from tablename
where username in ('Patrick', 'John')
group by title
having count(*) = 2
1

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

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

Проверь это:

(SELECT title FROM list WHERE username like 'Patrick' )
 intersect
(SELECT title FROM list WHERE username like 'John' );

Ещё вопросы

Сообщество Overcoder
Наверх
Меню