2010-02-27 81 views
3

我对这个问题有一个很好的子查询使用IN创建子查询

比方说,我们有一个表用户和链接。

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

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

而且可以说,我有这样的

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

我知道这是不是做这个最常用的方法有关系表。我发布了关于这种方法的建议的另一个问题。如果你有任何建议,这里的链接。

mysql query normal relationship table vs concatenated realtionship table

但是使用这个方案,我不能得到查询工作。我想出了查询如下:

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

我用正确的语法和行情这样做,但我只得到一个行,第一行。因此,例如使用这个相同的查询,我只得到link1作为结果。我需要获得link1和link3。

这使我疯狂,我真的需要一些帮助。

谢谢!

回答

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

正如我在answer to your previous question提到的,FIND_IN_SET是unsargable。

+0

啊,我明白了,谢谢你的回应。 – 2010-02-27 23:15:03