SELECT из двух одинаковых таблиц с пересечением

Запрос:

SELECT id_user 
  FROM Rating 
 Where id_movie=2 
INTERSECT 
SELECT id_user 
  FROM Rating 
 Where id_movie=3

но я получаю:

1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «INTERSECT SELECT id_user FROM Rating Where id_movie=3 LIMIT 0, 30» в строке 1

есть решение??


person dito    schedule 10.12.2009    source источник
comment
Ошибка в том, что MySQL не поддерживает ключевое слово INTERSECT.   -  person OMG Ponies    schedule 10.12.2009


Ответы (3)


Следующий запрос сделает ..

SELECT id_user 
FROM Rating 
Where id_movie=2 and id_user in 
             ( SELECT id_user FROM Rating Where id_movie=3);
person nayakam    schedule 10.12.2009
comment
Вы должны быть осторожны с NULL с этим синтаксисом. - person Rob Farley; 10.12.2009
comment
В зависимости от размера и порядка результатов каждого подзапроса (A and id_user in B или B and id_user in A) серверу mysql может потребоваться очень много времени, чтобы выдать вам результат. - person Cyrille; 14.05.2013

Ключевые слова Intersect, Minus отсутствуют в MySql, а обходные пути

  1. Внутреннее соединение и
  2. Подзапросы или
  3. Левое соединение соответственно.

Пожалуйста, загляните сюда

Выполнение INTERSECT и MINUS в MySQL

Я сделал попытку (хотя я парень с SQL Server)

Ввод:

id_user id_movie
101 1
102 2
102 3
104 4
102 5
107 6
102 2
103 3
109 9
110 2
110 3

Вывод с использованием пересечения (при запуске в SQL Server) будет

id_user
102
110

MySQL-совместимые запросы

Запрос 1 с использованием Inner join

select distinct a.id_user
from Rating a
join Rating b on a.id_user = b.id_user
where a.id_movie  = 2 and b.id_movie  = 3

Запрос 2 с использованием Cross join

select distinct a.id_user 
from Rating a, Rating b 
where a.id_user  = b.id_user 
  and a.id_movie  = 2
  and b.id_movie = 3

Запрос 3 с использованием подзапроса

Уже ответили выше.

person priyanka.sarkar    schedule 10.12.2009

Как насчет:

SELECT r2.id_user
FROM Rating AS r2
   JOIN
   Rating AS r3
   ON r3.id_user = r2.id_user
   AND r2.id_movie=2
   AND r3.id_movie=3;

Идея здесь в том, что вы хотите соединить строку в Рейтинге с другой строкой в ​​Рейтинге, для которой тот же пользователь видел фильмы 2 и 3.

person Rob Farley    schedule 10.12.2009