使用逗号分隔的联接字段联接表
集成多个表中的数据时,可能需要对包含以下内容的字段执行联接以逗号分隔的列表。这可能对传统的连接方法构成挑战。考虑以下场景:
场景:
有两个表、类别和电影。类别表包含具有唯一 ID 和名称的类别。电影表包含一个类别列,该列将多个类别 ID 存储为逗号分隔的列表。任务是连接这些表,从电影表中排除类别列,而是从类别表中选择匹配的类别名称到数组中。
解决方案:
为了克服这一挑战,可以采用对标准连接语法的修改:
select m.id, group_concat(c.name) from movies m join categories c on find_in_set(c.id, m.categories) group by m.id
在此查询中,在连接条件中使用 find_in_set() 函数。此函数检查类别表中的类别 ID 是否存在于电影表中以逗号分隔的类别 ID 列表中。
group_concat() 函数在 SELECT 子句中用于连接所有匹配的类别名称到一个数组中。 group by 子句确保数据按电影 ID 分组,为每部电影及其关联的类别名称生成一行。
示例:
考虑示例问题中提供:
表类别:
id | name |
---|---|
1 | Action |
2 | Comedy |
4 | Drama |
5 | Dance |
表电影:
id | categories |
---|---|
1 | 2,4 |
2 | 1,4 |
4 | 3,5 |
运行修改后的连接查询将产生以下输出:
表输出:
id | categories |
---|---|
1 | Comedy,Drama |
2 | Action,Drama |
4 | Other,Dance |
在此结果中,电影表中的类别列已被排除,并且相应的类别表中的类别名称已被选择到每部电影的数组中。
以上是如何使用逗号分隔的连接字段连接表:SQL 解决方案?的详细内容。更多信息请关注PHP中文网其他相关文章!