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链接