2009-12-18 7 views
0

J'ai une table avec une telle structure:Réécriture avec les sous-requêtes MySQL LEFT JOIN

  • uid
  • sid

tous les entiers. Cette table simule l'amitié entre deux utilisateurs.

Tout ce que je veux faire est de trouver de tels enregistrements qui existent seulement dans une direction.

Par exemple: Je souhaite trouver le nombre d'enregistrements ayant t1.u_id = 15, lorsqu'il n'y a pas d'enregistrements ayant t2.s_id = 15 et t2.u_id = t1.s_id.

Donc, cette relation entre deux ID n'existe qu'une seule fois.

Il m'a semblé que j'ai réussi à écrire la requête correcte avec des sous-requêtes, mais j'ai ensuite commencé à réécrire la requête en utilisant la jointure gauche pour augmenter la vitesse et maintenant ... ça ne marche pas.

Ma requête droite est maintenant:

SELECT * FROM `friends` AS f1 LEFT JOIN `friends` AS f2 
ON f1.user_id = f2.friend_id 
WHERE f1.friend_id=15 AND f2.user_id IS NULL 

mais cela ne fonctionne pas. S'il vous plaît aider.

NB. J'utilise mysql 5, donc je ne peux pas utiliser la commande EXCEPT et toutes les autres bonnes choses.

+0

expliquer * comment * il ne fonctionne pas? dossiers qu'il trouve qu'il ne devrait pas ou vice versa? – ysth

Répondre

1

Que pensez-vous de cela?

SELECT * 
FROM `friends` AS f1 
    LEFT JOIN `friends` AS f2 ON f1.user_id = f2.friend_id AND f1.friend_id = f2.user_id 
WHERE f1.friend_id=15 
    AND f2.user_id IS NULL 
0

Et celui-ci?

SELECT * FROM friends f1 LEFT JOIN friends f2 = f1.user_id f2.friend_id OÙ f1.friend_id = 15 ET f2.user_id IS NULL

+0

Devinez vous avez découvert ce que les tiques font:) – munch