2009-12-10 7 views
3

La requête:SELECT de deux même table avec Intersection

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

mais je reçois:

1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser à proximité « INTERSECT SELECT id_user Depuis Où id_movie = 3 LIMIT 0, 30 » à la ligne 1

toute solution ont ??

+2

L'erreur est que MySQL ne prend pas en charge le mot clé 'INTERSECT'. –

Répondre

5

Suite requête fera ..

SELECT id_user 
FROM Rating 
Where id_movie=2 and id_user in 
      (SELECT id_user FROM Rating Where id_movie=3); 
+2

Vous devriez faire attention aux valeurs NULL avec cette syntaxe. –

+0

En fonction de la taille et de l'ordre de chaque sous-requête ('A et id_user dans B' ou' B et id_user dans A'), le serveur mysql peut prendre un temps _really_ long pour vous donner un résultat. – Cyrille

2

Que diriez-vous:

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; 

L'idée ici est que vous souhaitez rejoindre une ligne Note avec une autre ligne de Note, pour laquelle le même l'utilisateur a vu des films 2 et 3.

3

Intersection, Minus mots-clés sont absents dans MySql et les solutions de contournement sont

  1. Rejoignez intérieur et
  2. Subqueries ou
  3. gauche Inscrivez-vous respectivement.

S'il vous plaît examiner ici

Doing INTERSECT and MINUS in MySQL

J'ai donné un coup de feu (bien que je suis un gars SQL Server)

Entrée:

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 

La sortie en utilisant un croisement (si exécuté dans SQL Server) sera

id_user 
102 
110 

requêtes compatibles MySQL

Query 1 utilisant 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 

Query 2 utilisant 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 

Requête 3 en utilisant la sous-requête

Déjà répondu ci-dessus.

Questions connexes