如何在mysql中使用IN查询联接表?

时间:2019-04-03 05:10:34

标签: mysql

我有两个表usersskills。表格中包含类似

的数据

用户表

id   name     skills_id
1    user1       2,4
2    user2       1,3

技能表

id      skills
 1      skill1
 2      skill2
 3      skill3
 4      skill4

我想通过使用skill_id来连接这两个表并显示技能名称。

我尝试了以下查询:

select * from users left join skills on skills.id in( users.skills_id )

但是它没有锻炼。帮我获取数据。

3 个答案:

答案 0 :(得分:0)

在on子句中使用webdetect = vision_client.web_detection(blob_source) jsonObj = MessageToJson(webdetect)

DEMO

find_in_set()

输出:

  select users.id, name, group_concat(skills) as val
   from users left join skills 
   on find_in_set(skills.id,users.skills_id)>0
   group by id,name

答案 1 :(得分:0)

通常,您应该避免在MySQL表中存储未标准化的CSV(逗号分隔)数据。最好在单独的记录中表示每个用户技能关系。作为解决方法,我们可以尝试在此处使用FIND_IN_SET

SELECT *
FROM users u
INNER JOIN skills s
    ON FIND_IN_SET(s.id, u.skills_id) > 0;

或者,我们可以尝试将LIKE与逗号配合使用:

SELECT *
FROM users u
INNER JOIN skills s
    ON CONCAT(',', u.skills_id, ',') LIKE CONCAT('%,', s.id, ',%');

enter image description here

Demo

答案 2 :(得分:0)

skills_id不是一系列值(如in运算符所期望的),它是一个用逗号分隔值的字符串。您可以使用find_in_set函数在其中进行搜索:

SELECT    *
FROM      users
LEFT JOIN skills ON FIND_IN_SET(skills.id, users.skills_id) > 0