2010-02-27 4 views
3

J'ai une question sur faire une bonne sous-requête pour ce problèmeCréation sous-requête en utilisant IN

Disons que nous avons une table utilisateurs, et des liens.

users 
+++++++++ 
id name 
1 name1 
2 name2 
3 name3 
+++++++++ 

links 
+++++++++ 
id link 
1 link1 
2 link1 
3 link1 
+++++++++ 

Et laisse dire que j'ai une table de relation comme celui-ci

name_links 
++++++++++++ 
uid lid 
1 1,3 
2 1,2,3 
3 2 
++++++++++++ 

Je sais que ce n'est pas la méthode la plus utilisée pour le faire. J'ai posté une autre question sur les suggestions sur cette méthode. Si vous avez des suggestions, voici le lien.

mysql query normal relationship table vs concatenated realtionship table

Mais en utilisant ce schéma, je ne peux pas obtenir la requête de travailler. La requête je suis venu avec est le suivant:

SELECT link 
FROM links 
WHERE links.id 
    IN 
    (
     SELECT lid 
     FROM name_links 
     WHERE uid=1 
    ) 

Je fais cela avec la bonne syntaxe et des citations, mais je reçois qu'une seule ligne, la première ligne. Donc, par exemple, en utilisant cette même requête, je n'ai que link1 comme résultat. J'ai besoin de link1 et link3.

Cela me rend fou, je peux vraiment besoin d'aide avec cela.

Merci!

Répondre

2
SELECT link 
FROM name_links 
JOIN links 
ON  FIND_IN_SET(id, lid) 
WHERE uid = 1 

Comme je l'ai mentionné dans le answer to your previous question, FIND_IN_SET est unsargable.

+0

Ah je vois, merci pour deux superbes réponses –

Questions connexes