INSERT INTO `projects` VALUES (17, '测试01', ',1,3,5,', '', '2023-02-03', '2023-02-08', 0, 10, 20);

projects表user_id字段存储用户表users的id,但是id有多个以逗号分隔,怎么根据projects表的user_id找到对应用户表的姓名user_name Mysql怎么写sql语句

在 MySQL 中,使用 SQL 语句可以实现根据 projects 表的 user_id 找到对应用户表的姓名 user_name。你可以使用 FIND_IN_SET() 函数来查找逗号分隔的 id 字符串对应的用户记录,并通过 JOIN 连接 projects 表和 users 表。

以下是一个示例 SQL 查询语句:

SELECT p.project_id, p.project_name, u.user_name
FROM projects p
JOIN users u ON FIND_IN_SET(u.id, p.user_id)
WHERE p.project_id = 17

在这个示例中,我们从 projects 表和 users 表中选择需要的字段,并使用 JOIN 来将两个表连接起来。FIND_IN_SET(u.id, p.user_id) 用于判断 u.id 是否在 p.user_id 的逗号分隔的字符串中存在。通过 WHERE 条件筛选指定的项目(在这里是项目ID为 17)。

请注意,这个例子假设 users 表中的主键是 id,并且 projects 表和 users 表可以通过 user_id 和 id 字段进行匹配。

根据你的实际需求和表结构,可能需要调整表名、字段名、条件和查询的结果等。

-------------------------------------------

--------------------------------------------

 

如果要查询的 user_name 也以逗号分隔显示,可以使用 GROUP_CONCAT() 函数将多个结果合并为一个字符串

以下是修改后的 SQL 查询语句:

SELECT p.project_id, p.project_name, GROUP_CONCAT(DISTINCT u.user_name) AS user_names
FROM projects p
JOIN users u ON FIND_IN_SET(u.id, p.user_id)
WHERE p.project_id = 17
GROUP BY p.project_id

在这个示例中,我们使用 GROUP_CONCAT(u.user_name) 将多个用户名称合并为一个以逗号分隔的字符串,并将其命名为 user_names 列。使用 GROUP BY 按照 p.project_id 和 p.project_name 分组。

执行该查询,将返回一个项目的ID、项目名称以及对应的用户姓名列表,多个姓名以逗号分隔显示。

----------------------------------------------------------

-----------------------------------------------------------

如果你想把 GROUP_CONCAT(u.name) 的结果用作 WHERE 条件,可以使用 HAVING 子句来过滤结果。

以下是示例 SQL 查询语句:

SELECT p.project_id, p.project_name, GROUP_CONCAT(DISTINCT u.name) AS user_names
FROM projects p
JOIN users u ON FIND_IN_SET(u.id, p.user_id)
GROUP BY p.project_id, p.project_name
HAVING user_names LIKE '%John%'

在这个示例中,我们使用 GROUP_CONCAT(u.name) 将多个用户名称合并为一个以逗号分隔的字符串,并将其命名为 user_names 列。然后使用 HAVING 子句筛选出包含关键字 “John” 的用户名称。你可以根据需要修改关键字。

请注意,HAVING 子句是在 GROUP BY 分组后对结果集进行过滤,可以使用聚合函数和别名。而 WHERE 子句是在查询之前对表中的行进行条件过滤,不能直接使用聚合函数和别名。

HAVING 多个条件,用and链接