SQLite:如何连接JOIN

fnvucqvd  于 2023-03-19  发布在  SQLite
关注(0)|答案(1)|浏览(160)

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

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; output = ['legs', 'quads'].我知道如何在一个查询中得到练习id,在另一个查询中得到对应的id_tag,但我不知道如何把所有的放在一起得到最终的结果,我想我必须使用JOIN,但我不知道如何执行两个JOIN

mznpcxlj

mznpcxlj1#

如果您连接所有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']

相关问题