我的数据库中有三个表,与体育锻炼有关:
exercises(id, name)
tags(id, name)
exercises_tags(id_exercise, id_tag)
exercises_tags
表存储哪些标签对应于哪些练习。一项练习可以有多个标签。
例子:
exercises(id, name):
(1, 'squat')
tags(id, name)
(1, 'legs')
(2, 'quads')
(3, triceps)
exercises_tags(id_exercise, id_tag)
(1, 1)
(1, 2)
我想要一个查询,对于给定的练习名称,它返回相应的标签名称,在示例输入中:
squat
;输出 = ['legs', 'quads']
。我知道如何在查询中获取练习id
,在另一个查询中获取相应的id_tag
,但我不知道如何将所有内容放在一起并获得最终结果。我想我必须使用JOIN
,但我不知道如何执行两个JOIN
s.
如果加入所有 3 个表,您将获得与输入练习相关的
tags
的所有行。fetchall()
将这些行作为子列表列表返回。for
循环中提取所有这些项目,您可以获得列表形式的结果:
db = 'database_name.db'
con = sqlite3.connect(db)
cur = con.cursor()
sql = """
SELECT t.name
FROM exercises AS e
INNER JOIN exercises_tags AS et ON et.id_exercise = e.id
INNER JOIN tags AS t ON t.id = et.id_tag
WHERE e.name = ?;
"""
list = [item[0] for item in cur.execute(sql, ('squat', )).fetchall()]
print(list)
它将打印:
['legs', 'quads']