使用IN创建子查询

时间:2010-02-27 22:56:51

标签: mysql subquery

我有一个关于为这个问题制作一个好的子查询的问题

假设我们有一个表用户和链接。

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。

这让我疯了,我真的需要一些帮助。

谢谢!

1 个答案:

答案 0 :(得分: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是不可原谅的。