SQLite多表JOIN实现:根据运动名称查询对应标签名称
根据运动名称查询对应标签列表
你可以通过两次JOIN关联三个表,直接获取指定运动的标签名称,基础查询语句如下:
SELECT tags.name FROM exercises JOIN exercises_tags ON exercises.id = exercises_tags.id_exercise JOIN tags ON exercises_tags.id_tag = tags.id WHERE exercises.name = 'squat';
语句逻辑说明:
- 第一次
JOIN通过运动ID,将exercises表和exercises_tags关联,找到目标运动对应的所有标签ID - 第二次
JOIN通过标签ID,将exercises_tags表和tags关联,把标签ID转换为可读的标签名称 - 通过
WHERE子句指定要查询的运动名称(比如示例中的squat)
如果需要将结果合并为一个类似['legs', 'quads']的列表格式,不同数据库有对应的聚合函数:
- MySQL/MariaDB 使用
GROUP_CONCAT:
SELECT GROUP_CONCAT(tags.name SEPARATOR ', ') AS tag_list FROM exercises JOIN exercises_tags ON exercises.id = exercises_tags.id_exercise JOIN tags ON exercises_tags.id_tag = tags.id WHERE exercises.name = 'squat' GROUP BY exercises.id;
返回结果为legs, quads,可在应用层进一步处理成数组格式。
- PostgreSQL 使用
STRING_AGG:
SELECT STRING_AGG(tags.name, ', ') AS tag_list FROM exercises JOIN exercises_tags ON exercises.id = exercises_tags.id_exercise JOIN tags ON exercises_tags.id_tag = tags.id WHERE exercises.name = 'squat' GROUP BY exercises.id;
内容的提问来源于stack exchange,提问作者Abel Gutiérrez
相关产品推荐
相关产品推荐

