SQLite:如何连接 JOIN

问题描述 投票:0回答:1

我的数据库中有三个表,与体育锻炼有关:

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.

python sql list sqlite inner-join
1个回答
3
投票

如果加入所有 3 个表,您将获得与输入练习相关的

tags
的所有行。
Python 的
fetchall()
将这些行作为子列表列表返回。
每个子列表只包含 1 个项目,通过在
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']
© www.soinside.com 2019 - 2024. All rights reserved.