Mysql使用子查询和中的

Mysql使用子查询和中的,mysql,sql,join,Mysql,Sql,Join,我有一个名为category\u id的字段,来自我的表contact,每个contact有一个id或类别的列表id(1或1,2,3) 类别表中具有id和Name列的类别的名称 我喜欢显示联系人表中类别列表中所有类别名称的结果。怎么做 SELECT c.`id`, (SELECT cat.`name` FROM category cat WHERE c.`category` in cat.`id` ) AS 'Categories' FROM contact c

我有一个名为
category\u id
的字段,来自我的表
contact
,每个
contact
有一个
id
类别的列表id(1或1,2,3)

类别表中具有id和Name列的类别的名称

我喜欢显示联系人表中类别列表中所有类别名称的结果。怎么做

SELECT c.`id`,
    (SELECT cat.`name` 
     FROM category cat 
     WHERE c.`category` in cat.`id` ) AS 'Categories'
FROM contact c

我测试过这个,但它当然不起作用。c.
category
列内容可以是1,2,3或3。

您有一个包含文本
1,2,3
的category字段吗?那么你想要的不是直接可能的。字段在SQL中被视为原子实体,您的查询被解析/执行为

WHERE c.category IN ('1,2,3')
aka
WHERE c.category = '1,2,3'
而不是

WHERE c.category IN ('1', '2', '3')
aka
WHERE (c.category = '1') OR (c.category = '2') OR (c.category = '3')
你需要的


MySQL确实有这样的功能,但请注意,使用它会阻止使用索引,并且在任何大型表上,查询性能都将是垃圾。它还使您的SQL不可移植。

您有一个类别字段,其中包含文本
1,2,3
?那么你想要的不是直接可能的。字段在SQL中被视为原子实体,您的查询被解析/执行为

WHERE c.category IN ('1,2,3')
aka
WHERE c.category = '1,2,3'
SELECT con.`id`, cat.'name'
FROM contract con
INNER JOIN category cat ON con.'category' = cat.'id'
WHERE c.category IN ('1,2,3')
而不是

WHERE c.category IN ('1', '2', '3')
aka
WHERE (c.category = '1') OR (c.category = '2') OR (c.category = '3')
你需要的

MySQL确实有这样的功能,但请注意,使用它会阻止使用索引,并且在任何大型表上,查询性能都将是垃圾。它还使SQL不可移植

SELECT con.`id`, cat.'name'
FROM contract con
INNER JOIN category cat ON con.'category' = cat.'id'
WHERE c.category IN ('1,2,3')